]> git.saurik.com Git - wxWidgets.git/commitdiff
restore passing WM_COMMAND messages for SC_XXX commands to DefFrameProc() in wxMDIPar...
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 9 Mar 2009 13:05:40 +0000 (13:05 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 9 Mar 2009 13:05:40 +0000 (13:05 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59446 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/msw/mdi.cpp

index 1386635c5131e337f0026a9673953cdcb203030b..aa931d6eaf6e414005decdb96556c0d550d700cb 100644 (file)
@@ -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;