From: Vadim Zeitlin Date: Mon, 9 Mar 2009 13:05:40 +0000 (+0000) Subject: restore passing WM_COMMAND messages for SC_XXX commands to DefFrameProc() in wxMDIPar... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/f4be5cd0bfcffbea9634767ceb2d6fd324a4b27d?ds=sidebyside restore passing WM_COMMAND messages for SC_XXX commands to DefFrameProc() in wxMDIParentFrame::MSWWindowProc() accidentally removed in previous changes; removed doing this for WM_SYSCOMMAND in wxMDIChildFrame as this does seem to be unnecessary git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59446 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/msw/mdi.cpp b/src/msw/mdi.cpp index 1386635c51..aa931d6eaf 100644 --- a/src/msw/mdi.cpp +++ b/src/msw/mdi.cpp @@ -522,8 +522,8 @@ void wxMDIParentFrame::ActivatePrevious() // --------------------------------------------------------------------------- WXLRESULT wxMDIParentFrame::MSWWindowProc(WXUINT message, - WXWPARAM wParam, - WXLPARAM lParam) + WXWPARAM wParam, + WXLPARAM lParam) { WXLRESULT rc = 0; bool processed = false; @@ -540,6 +540,25 @@ WXLRESULT wxMDIParentFrame::MSWWindowProc(WXUINT message, } break; + case WM_COMMAND: + // system messages such as SC_CLOSE are sent as WM_COMMANDs to the + // parent MDI frame and we must let the DefFrameProc() have them + // for these commands to work (without it, closing the maximized + // MDI children doesn't work, for example) + { + WXWORD id, cmd; + WXHWND hwnd; + UnpackCommand(wParam, lParam, &id, &hwnd, &cmd); + + if ( cmd == 0 /* menu */ && + id >= SC_SIZE /* first system menu command */ ) + { + MSWDefWindowProc(message, wParam, lParam); + processed = true; + } + } + break; + case WM_CREATE: m_clientWindow = OnCreateClient(); // Uses own style for client style @@ -561,8 +580,9 @@ WXLRESULT wxMDIParentFrame::MSWWindowProc(WXUINT message, break; case WM_SIZE: - // though we don't (usually) resize the MDI client to exactly fit the - // client area we need to pass this one to DefFrameProc to allow the children to show + // though we don't (usually) resize the MDI client to exactly fit + // the client area we need to pass this one to DefFrameProc to + // allow the children to show break; } @@ -1020,8 +1040,8 @@ void wxMDIChildFrame::Activate() // --------------------------------------------------------------------------- WXLRESULT wxMDIChildFrame::MSWWindowProc(WXUINT message, - WXWPARAM wParam, - WXLPARAM lParam) + WXWPARAM wParam, + WXLPARAM lParam) { WXLRESULT rc = 0; bool processed = false; @@ -1054,11 +1074,6 @@ WXLRESULT wxMDIChildFrame::MSWWindowProc(WXUINT message, MSWDefWindowProc(message, wParam, lParam); 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: processed = HandleWindowPosChanging((LPWINDOWPOS)lParam); break;