]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/mdi.cpp
Compilation fir for VC6 after r73124.
[wxWidgets.git] / src / msw / mdi.cpp
index 55078de4c0977298684244d7b0baa29190986d43..46e0166c80ba353a231113466748919251e2904e 100644 (file)
@@ -138,6 +138,14 @@ END_EVENT_TABLE()
 // the children
 // ===========================================================================
 
+void wxMDIParentFrame::Init()
+{
+#if wxUSE_MENUS && wxUSE_ACCEL
+  // the default menu doesn't have any accelerators (even if we have it)
+  m_accelWindowMenu = NULL;
+#endif // wxUSE_MENUS && wxUSE_ACCEL
+}
+
 bool wxMDIParentFrame::Create(wxWindow *parent,
                               wxWindowID id,
                               const wxString& title,
@@ -162,11 +170,6 @@ bool wxMDIParentFrame::Create(wxWindow *parent,
       m_windowMenu->Append(wxID_MDI_WINDOW_PREV, _("&Previous"));
   }
 
-#if wxUSE_MENUS && wxUSE_ACCEL
-  // the default menu doesn't have any accelerators (even if we have it)
-  m_accelWindowMenu = NULL;
-#endif // wxUSE_MENUS && wxUSE_ACCEL
-
   if (!parent)
     wxTopLevelWindows.Append(this);
 
@@ -187,7 +190,7 @@ bool wxMDIParentFrame::Create(wxWindow *parent,
   msflags &= ~WS_HSCROLL;
 
   if ( !wxWindow::MSWCreate(wxApp::GetRegisteredClassName(wxT("wxMDIFrame")),
-                            title.wx_str(),
+                            title.t_str(),
                             pos, size,
                             msflags,
                             exflags) )
@@ -314,13 +317,23 @@ void wxMDIParentFrame::RemoveMDIChild(wxMDIChildFrame * WXUNUSED(child))
 void wxMDIParentFrame::AddWindowMenu()
 {
     if ( m_windowMenu )
+    {
+        // For correct handling of the events from this menu we also must
+        // attach it to the menu bar.
+        m_windowMenu->Attach(GetMenuBar());
+
         MDIInsertWindowMenu(GetClientWindow(), m_hMenu, GetMDIWindowMenu(this));
+    }
 }
 
 void wxMDIParentFrame::RemoveWindowMenu()
 {
     if ( m_windowMenu )
+    {
         MDIRemoveWindowMenu(GetClientWindow(), m_hMenu);
+
+        m_windowMenu->Detach();
+    }
 }
 
 void wxMDIParentFrame::UpdateWindowMenu(bool enable)
@@ -366,8 +379,7 @@ void wxMDIParentFrame::SetWindowMenu(wxMenu* menu)
     }
 
 #if wxUSE_ACCEL
-    delete m_accelWindowMenu;
-    m_accelWindowMenu = NULL;
+    wxDELETE(m_accelWindowMenu);
 
     if ( menu && menu->HasAccels() )
         m_accelWindowMenu = menu->CreateAccelTable();
@@ -571,19 +583,6 @@ WXLRESULT wxMDIParentFrame::MSWWindowProc(WXUINT message,
 
             processed = true;
             break;
-
-        case WM_ERASEBKGND:
-            processed = true;
-
-            // we erase background ourselves
-            rc = true;
-            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
-            break;
     }
 
     if ( !processed )
@@ -629,9 +628,7 @@ void wxMDIParentFrame::OnMDIChild(wxCommandEvent& event)
             int childId = wxGetWindowId(child->GetHWND());
             if ( childId == event.GetId() )
             {
-                ::SendMessage( GetWinHwnd(GetClientWindow()),
-                        WM_MDIACTIVATE,
-                        (WPARAM)child->GetHWND(), 0);
+                wxStaticCast(child, wxMDIChildFrame)->Activate();
                 return;
             }
         }
@@ -696,7 +693,7 @@ bool wxMDIParentFrame::TryBefore(wxEvent& event)
     if ( event.GetEventType() == wxEVT_COMMAND_MENU_SELECTED )
     {
         wxMDIChildFrame * const child = GetActiveChild();
-        if ( child && child->ProcessEventHere(event) )
+        if ( child && child->ProcessWindowEventLocally(event) )
             return true;
     }
 
@@ -796,8 +793,8 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent,
   if ( !(style & wxFULL_REPAINT_ON_RESIZE) )
       className += wxApp::GetNoRedrawClassSuffix();
 
-  mcs.szClass = className.wx_str();
-  mcs.szTitle = title.wx_str();
+  mcs.szClass = className.t_str();
+  mcs.szTitle = title.t_str();
   mcs.hOwner = wxGetInstance();
   if (x != wxDefaultCoord)
       mcs.x = x;
@@ -1038,6 +1035,11 @@ void wxMDIChildFrame::Activate()
     wxMDIParentFrame * const parent = GetMDIParent();
     if ( parent && parent->GetClientWindow() )
     {
+        // Activating an iconized MDI frame doesn't do anything, so restore it
+        // first to really present it to the user.
+        if ( IsIconized() )
+            Restore();
+
         ::SendMessage(GetWinHwnd(parent->GetClientWindow()), WM_MDIACTIVATE,
                       (WPARAM) GetHwnd(), 0);
     }
@@ -1122,7 +1124,7 @@ bool wxMDIChildFrame::HandleMDIActivate(long WXUNUSED(activate),
 
         WXHMENU hMenuParent = parent->m_hMenu;
 
-        // activate the the parent menu only when there is no other child
+        // activate the parent menu only when there is no other child
         // that has been activated
         if ( hMenuParent && !hwndAct )
             hMenuToSet = hMenuParent;
@@ -1375,7 +1377,7 @@ void wxMDIClientWindow::DoSetSize(int x, int y, int width, int height, int sizeF
             while (node)
             {
                 wxWindow *child = node->GetData();
-                if (child->IsKindOf(CLASSINFO(wxMDIChildFrame)))
+                if (wxDynamicCast(child, wxMDIChildFrame))
                 {
                    ::RedrawWindow(GetHwndOf(child),
                                   NULL,
@@ -1474,7 +1476,7 @@ void MDIInsertWindowMenu(wxWindow *win, WXHMENU hMenu, HMENU menuWin)
                 inserted = true;
                 ::InsertMenu(hmenu, i, MF_BYPOSITION | MF_POPUP | MF_STRING,
                              (UINT_PTR)menuWin,
-                             wxGetTranslation(WINDOW_MENU_LABEL).wx_str());
+                             wxString(wxGetTranslation(WINDOW_MENU_LABEL)).t_str());
                 break;
             }
         }
@@ -1483,7 +1485,7 @@ void MDIInsertWindowMenu(wxWindow *win, WXHMENU hMenu, HMENU menuWin)
         {
             ::AppendMenu(hmenu, MF_POPUP,
                          (UINT_PTR)menuWin,
-                         wxGetTranslation(WINDOW_MENU_LABEL).wx_str());
+                         wxString(wxGetTranslation(WINDOW_MENU_LABEL)).t_str());
         }
     }