]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/mdi.cpp
Const casting fix for Vis C.
[wxWidgets.git] / src / msw / mdi.cpp
index 8ce7cfc8e9f3bc78adc1d4de00a82715cceb5f5b..e3db308a0f0b8bb7c01ff1abd5a99a9d506b06a2 100644 (file)
@@ -1,6 +1,6 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        mdi.cpp
-// Purpose:     MDI classes
+// Name:        src/msw/mdi.cpp
+// Purpose:     MDI classes for wxMSW
 // Author:      Julian Smart
 // Modified by:
 // Created:     04/01/98
@@ -304,7 +304,7 @@ void wxMDIParentFrame::SetWindowMenu(wxMenu* menu)
     }
 }
 
-void wxMDIParentFrame::OnSize(wxSizeEvent& event)
+void wxMDIParentFrame::OnSize(wxSizeEvent&)
 {
     if ( GetClientWindow() )
     {
@@ -722,6 +722,15 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent,
   //SetWindowLong(GetHwnd(), 0, (long)this);
 
   wxModelessWindows.Append(this);
+
+  // Necessary to make ResetWindowStyle() work
+  // and will be called eventually anyway 
+  Activate();
+
+  // Without this, a maximized child will still
+  // a double border around the child
+  ResetWindowStyle((void *)NULL); // Set the Client ExStyle right
+
   return TRUE;
 }
 
@@ -1089,10 +1098,14 @@ bool wxMDIChildFrame::ResetWindowStyle(void *vrect)
     if (!pChild || (pChild == this))
     {
         HWND hwndClient = GetWinHwnd(pFrameWnd->GetClientWindow());
-        DWORD dwStyle = ::GetWindowLong(hwndClient, GWL_STYLE);
-        DWORD dwThisStyle = ::GetWindowLong(GetHwnd(), GWL_STYLE);
+        DWORD dwStyle = ::GetWindowLong(hwndClient, GWL_EXSTYLE);
+
+        // we want to test whether there is a maximized child, so just set
+        // dwThisStyle to 0 if there is no child at all
+        DWORD dwThisStyle = pChild
+            ? ::GetWindowLong(GetWinHwnd(pChild), GWL_STYLE) : NULL;
         DWORD dwNewStyle = dwStyle;
-        if (pChild != NULL && (dwThisStyle & WS_MAXIMIZE))
+        if ( dwThisStyle & WS_MAXIMIZE )
             dwNewStyle &= ~(WS_EX_CLIENTEDGE);
         else
             dwNewStyle |= WS_EX_CLIENTEDGE;
@@ -1136,7 +1149,7 @@ bool wxMDIClientWindow::CreateClient(wxMDIParentFrame *parent, long style)
         ccs.hWindowMenu = (HMENU) parent->GetWindowMenu()->GetHMenu();
     ccs.idFirstChild = wxFIRST_MDI_CHILD;
 
-    DWORD msStyle = WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN;
+    DWORD msStyle = MDIS_ALLCHILDSTYLES | WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN;
     if ( style & wxHSCROLL )
         msStyle |= WS_HSCROLL;
     if ( style & wxVSCROLL )
@@ -1256,6 +1269,7 @@ static void MDISetMenu(wxWindow *win, HMENU hmenuFrame, HMENU hmenuWindow)
     wxWindow *parent = win->GetParent();
     wxCHECK_RET( parent, wxT("MDI client without parent frame? weird...") );
 
+    ::SendMessage(GetWinHwnd(win), WM_MDIREFRESHMENU, 0, 0L);
     ::DrawMenuBar(GetWinHwnd(parent));
 }
 
@@ -1302,7 +1316,6 @@ static void RemoveWindowMenu(wxWindow *win, WXHMENU menu)
     // Try to insert Window menu in front of Help, otherwise append it.
     HMENU hmenu = (HMENU)menu;
     int N = GetMenuItemCount(hmenu);
-    bool success = FALSE;
     for ( int i = 0; i < N; i++ )
     {
         wxChar buf[256];
@@ -1316,7 +1329,6 @@ static void RemoveWindowMenu(wxWindow *win, WXHMENU menu)
 
         if ( wxStripMenuCodes(wxString(buf)).IsSameAs(_("Window")) )
         {
-            success = TRUE;
             ::RemoveMenu(hmenu, i, MF_BYPOSITION);
             break;
         }