MDI child maximize bug fixed
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2884 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
33caefb377
commit
b3818fbe8e
@ -338,6 +338,10 @@ long wxMDIParentFrame::MSWWindowProc(WXUINT message,
|
|||||||
// so pretend we processed the message anyhow
|
// so pretend we processed the message anyhow
|
||||||
processed = TRUE;
|
processed = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// always pass this message DefFrameProc(), otherwise MDI menu
|
||||||
|
// commands (and sys commands - more surprizingly!) won't work
|
||||||
|
MSWDefWindowProc(message, wParam, lParam);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_CREATE:
|
case WM_CREATE:
|
||||||
@ -377,6 +381,12 @@ long wxMDIParentFrame::MSWWindowProc(WXUINT message,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WM_SIZE:
|
||||||
|
// we will leave this message to the base class version, but we
|
||||||
|
// must pass it to DefFrameProc() too
|
||||||
|
MSWDefWindowProc(message, wParam, lParam);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !processed )
|
if ( !processed )
|
||||||
@ -627,20 +637,18 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent,
|
|||||||
|
|
||||||
mcs.lParam = 0;
|
mcs.lParam = 0;
|
||||||
|
|
||||||
DWORD Return = SendMessage((HWND) parent->GetClientWindow()->GetHWND(),
|
DWORD Return = SendMessage(GetWinHwnd(parent->GetClientWindow()),
|
||||||
WM_MDICREATE, 0, (LONG)(LPSTR)&mcs);
|
WM_MDICREATE, 0, (LONG)(LPSTR)&mcs);
|
||||||
|
|
||||||
//handle = (HWND)LOWORD(Return);
|
//handle = (HWND)LOWORD(Return);
|
||||||
// Must be the DWORRD for WIN32. And in 16 bits, HIWORD=0 (says Microsoft)
|
// Must be the DWORRD for WIN32. And in 16 bits, HIWORD=0 (says Microsoft)
|
||||||
m_hWnd = (WXHWND)Return;
|
m_hWnd = (WXHWND)Return;
|
||||||
|
|
||||||
// This gets reassigned so can't be stored
|
|
||||||
// m_windowId = GetWindowLong((HWND) m_hWnd, GWL_ID);
|
|
||||||
|
|
||||||
wxWndHook = NULL;
|
wxWndHook = NULL;
|
||||||
wxWinHandleList->Append((long)GetHWND(), this);
|
wxWinHandleList->Append((long)GetHWND(), this);
|
||||||
|
|
||||||
SetWindowLong((HWND) GetHWND(), 0, (long)this);
|
// VZ: what's this? an act of piracy?
|
||||||
|
//SetWindowLong(GetHwnd(), 0, (long)this);
|
||||||
|
|
||||||
wxModelessWindows.Append(this);
|
wxModelessWindows.Append(this);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -655,7 +663,7 @@ wxMDIChildFrame::~wxMDIChildFrame()
|
|||||||
// to wxWindows)
|
// to wxWindows)
|
||||||
void wxMDIChildFrame::DoSetClientSize(int width, int height)
|
void wxMDIChildFrame::DoSetClientSize(int width, int height)
|
||||||
{
|
{
|
||||||
HWND hWnd = (HWND) GetHWND();
|
HWND hWnd = GetHwnd();
|
||||||
|
|
||||||
RECT rect;
|
RECT rect;
|
||||||
::GetClientRect(hWnd, &rect);
|
::GetClientRect(hWnd, &rect);
|
||||||
@ -695,7 +703,7 @@ void wxMDIChildFrame::DoSetClientSize(int width, int height)
|
|||||||
void wxMDIChildFrame::DoGetPosition(int *x, int *y) const
|
void wxMDIChildFrame::DoGetPosition(int *x, int *y) const
|
||||||
{
|
{
|
||||||
RECT rect;
|
RECT rect;
|
||||||
GetWindowRect((HWND) GetHWND(), &rect);
|
GetWindowRect(GetHwnd(), &rect);
|
||||||
POINT point;
|
POINT point;
|
||||||
point.x = rect.left;
|
point.x = rect.left;
|
||||||
point.y = rect.top;
|
point.y = rect.top;
|
||||||
@ -728,21 +736,21 @@ void wxMDIChildFrame::Maximize()
|
|||||||
{
|
{
|
||||||
wxMDIParentFrame *parent = (wxMDIParentFrame *)GetParent();
|
wxMDIParentFrame *parent = (wxMDIParentFrame *)GetParent();
|
||||||
if ( parent && parent->GetClientWindow() )
|
if ( parent && parent->GetClientWindow() )
|
||||||
::SendMessage( (HWND) parent->GetClientWindow()->GetHWND(), WM_MDIMAXIMIZE, (WPARAM) (HWND) GetHWND(), 0);
|
::SendMessage(GetWinHwnd(parent->GetClientWindow()), WM_MDIMAXIMIZE, (WPARAM) GetHwnd(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMDIChildFrame::Restore()
|
void wxMDIChildFrame::Restore()
|
||||||
{
|
{
|
||||||
wxMDIParentFrame *parent = (wxMDIParentFrame *)GetParent();
|
wxMDIParentFrame *parent = (wxMDIParentFrame *)GetParent();
|
||||||
if ( parent && parent->GetClientWindow() )
|
if ( parent && parent->GetClientWindow() )
|
||||||
::SendMessage( (HWND) parent->GetClientWindow()->GetHWND(), WM_MDIRESTORE, (WPARAM) (HWND) GetHWND(), 0);
|
::SendMessage(GetWinHwnd(parent->GetClientWindow()), WM_MDIRESTORE, (WPARAM) GetHwnd(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMDIChildFrame::Activate()
|
void wxMDIChildFrame::Activate()
|
||||||
{
|
{
|
||||||
wxMDIParentFrame *parent = (wxMDIParentFrame *)GetParent();
|
wxMDIParentFrame *parent = (wxMDIParentFrame *)GetParent();
|
||||||
if ( parent && parent->GetClientWindow() )
|
if ( parent && parent->GetClientWindow() )
|
||||||
::SendMessage( (HWND) parent->GetClientWindow()->GetHWND(), WM_MDIACTIVATE, (WPARAM) (HWND) GetHWND(), 0);
|
::SendMessage(GetWinHwnd(parent->GetClientWindow()), WM_MDIACTIVATE, (WPARAM) GetHwnd(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@ -769,10 +777,6 @@ long wxMDIChildFrame::MSWWindowProc(WXUINT message,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_SIZE:
|
|
||||||
processed = HandleSize(LOWORD(lParam), HIWORD(lParam), wParam);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_GETMINMAXINFO:
|
case WM_GETMINMAXINFO:
|
||||||
// let the default window proc calculate the size of MDI children
|
// let the default window proc calculate the size of MDI children
|
||||||
// frames because it is based on the size of the MDI client window,
|
// frames because it is based on the size of the MDI client window,
|
||||||
@ -787,8 +791,25 @@ long wxMDIChildFrame::MSWWindowProc(WXUINT message,
|
|||||||
|
|
||||||
processed = HandleMDIActivate(act, hwndAct, hwndDeact);
|
processed = HandleMDIActivate(act, hwndAct, hwndDeact);
|
||||||
}
|
}
|
||||||
|
// fall through
|
||||||
|
|
||||||
|
case WM_MOVE:
|
||||||
|
// must pass WM_MOVE to DefMDIChildProc() to recalculate MDI client
|
||||||
|
// scrollbars if necessary
|
||||||
|
|
||||||
|
// fall through
|
||||||
|
|
||||||
|
case WM_SIZE:
|
||||||
|
// must pass WM_SIZE to DefMDIChildProc(), otherwise many weird
|
||||||
|
// things happen
|
||||||
|
MSWDefWindowProc(message, wParam, lParam);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WM_SYSCOMMAND:
|
||||||
|
// DefMDIChildProc handles SC_{NEXT/PREV}WINDOW here, so pass it
|
||||||
|
// the message (the base class version does not)
|
||||||
|
return MSWDefWindowProc(message, wParam, lParam);
|
||||||
|
|
||||||
case WM_WINDOWPOSCHANGING:
|
case WM_WINDOWPOSCHANGING:
|
||||||
processed = HandleWindowPosChanging((LPWINDOWPOS)lParam);
|
processed = HandleWindowPosChanging((LPWINDOWPOS)lParam);
|
||||||
break;
|
break;
|
||||||
@ -939,8 +960,8 @@ bool wxMDIChildFrame::HandleWindowPosChanging(void *pos)
|
|||||||
if (!(lpPos->flags & SWP_NOSIZE))
|
if (!(lpPos->flags & SWP_NOSIZE))
|
||||||
{
|
{
|
||||||
RECT rectClient;
|
RECT rectClient;
|
||||||
DWORD dwExStyle = ::GetWindowLong((HWND) GetHWND(), GWL_EXSTYLE);
|
DWORD dwExStyle = ::GetWindowLong(GetHwnd(), GWL_EXSTYLE);
|
||||||
DWORD dwStyle = ::GetWindowLong((HWND) GetHWND(), GWL_STYLE);
|
DWORD dwStyle = ::GetWindowLong(GetHwnd(), GWL_STYLE);
|
||||||
if (ResetWindowStyle((void *) & rectClient) && (dwStyle & WS_MAXIMIZE))
|
if (ResetWindowStyle((void *) & rectClient) && (dwStyle & WS_MAXIMIZE))
|
||||||
{
|
{
|
||||||
::AdjustWindowRectEx(&rectClient, dwStyle, FALSE, dwExStyle);
|
::AdjustWindowRectEx(&rectClient, dwStyle, FALSE, dwExStyle);
|
||||||
@ -990,7 +1011,7 @@ bool wxMDIChildFrame::MSWTranslateMessage(WXMSG* msg)
|
|||||||
void wxMDIChildFrame::MSWDestroyWindow()
|
void wxMDIChildFrame::MSWDestroyWindow()
|
||||||
{
|
{
|
||||||
MSWDetachWindowMenu();
|
MSWDetachWindowMenu();
|
||||||
invalidHandle = (HWND) GetHWND();
|
invalidHandle = GetHwnd();
|
||||||
|
|
||||||
wxMDIParentFrame *parent = (wxMDIParentFrame *)GetParent();
|
wxMDIParentFrame *parent = (wxMDIParentFrame *)GetParent();
|
||||||
|
|
||||||
@ -999,11 +1020,8 @@ void wxMDIChildFrame::MSWDestroyWindow()
|
|||||||
// the wxFrame is destroyed.
|
// the wxFrame is destroyed.
|
||||||
|
|
||||||
HWND oldHandle = (HWND)GetHWND();
|
HWND oldHandle = (HWND)GetHWND();
|
||||||
#ifdef __WIN32__
|
SendMessage(GetWinHwnd(parent->GetClientWindow()), WM_MDIDESTROY,
|
||||||
SendMessage((HWND) parent->GetClientWindow()->GetHWND(), WM_MDIDESTROY, (WPARAM)oldHandle, (LPARAM)0);
|
(WPARAM)oldHandle, 0);
|
||||||
#else
|
|
||||||
SendMessage((HWND) parent->GetClientWindow()->GetHWND(), WM_MDIDESTROY, (WPARAM)oldHandle, 0);
|
|
||||||
#endif
|
|
||||||
invalidHandle = 0;
|
invalidHandle = 0;
|
||||||
|
|
||||||
if (m_hMenu)
|
if (m_hMenu)
|
||||||
@ -1024,8 +1042,8 @@ bool wxMDIChildFrame::ResetWindowStyle(void *vrect)
|
|||||||
wxMDIChildFrame* pChild = pFrameWnd->GetActiveChild();
|
wxMDIChildFrame* pChild = pFrameWnd->GetActiveChild();
|
||||||
if (!pChild || (pChild == this))
|
if (!pChild || (pChild == this))
|
||||||
{
|
{
|
||||||
DWORD dwStyle = ::GetWindowLong((HWND) pFrameWnd->GetClientWindow()->GetHWND(), GWL_EXSTYLE);
|
DWORD dwStyle = ::GetWindowLong(GetWinHwnd(pFrameWnd->GetClientWindow()), GWL_EXSTYLE);
|
||||||
DWORD dwThisStyle = ::GetWindowLong((HWND) GetHWND(), GWL_STYLE);
|
DWORD dwThisStyle = ::GetWindowLong(GetHwnd(), GWL_STYLE);
|
||||||
DWORD dwNewStyle = dwStyle;
|
DWORD dwNewStyle = dwStyle;
|
||||||
if (pChild != NULL && (dwThisStyle & WS_MAXIMIZE))
|
if (pChild != NULL && (dwThisStyle & WS_MAXIMIZE))
|
||||||
dwNewStyle &= ~(WS_EX_CLIENTEDGE);
|
dwNewStyle &= ~(WS_EX_CLIENTEDGE);
|
||||||
@ -1159,7 +1177,7 @@ static void InsertWindowMenu(wxWindow *win, WXHMENU menu, HMENU subMenu)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( wxStripMenuCodes(wxString(buf)).IsSameAs(_("Help")) )
|
if ( wxStripMenuCodes(wxString(buf)).IsSameAs(_T("Help")) )
|
||||||
{
|
{
|
||||||
success = TRUE;
|
success = TRUE;
|
||||||
::InsertMenu(hmenu, i, MF_BYPOSITION | MF_POPUP | MF_STRING,
|
::InsertMenu(hmenu, i, MF_BYPOSITION | MF_POPUP | MF_STRING,
|
||||||
@ -1170,7 +1188,7 @@ static void InsertWindowMenu(wxWindow *win, WXHMENU menu, HMENU subMenu)
|
|||||||
|
|
||||||
if ( !success )
|
if ( !success )
|
||||||
{
|
{
|
||||||
::AppendMenu(hmenu, MF_POPUP, (UINT)subMenu, _("&Window"));
|
::AppendMenu(hmenu, MF_POPUP, (UINT)subMenu, _T("&Window"));
|
||||||
}
|
}
|
||||||
|
|
||||||
MDISetMenu(win, hmenu, subMenu);
|
MDISetMenu(win, hmenu, subMenu);
|
||||||
|
Loading…
Reference in New Issue
Block a user