]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/frame.cpp
Enable variadic macros for VC9 and later.
[wxWidgets.git] / src / msw / frame.cpp
index c9c90a78c7a9a68621cfbdaab42542ca13c9d567..f61c8f5f0cbda0cd63003e6027e284d205da5072 100644 (file)
@@ -239,11 +239,6 @@ void wxFrame::DoGetClientSize(int *x, int *y) const
 // wxFrame: various geometry-related functions
 // ----------------------------------------------------------------------------
 
-void wxFrame::Raise()
-{
-    ::SetForegroundWindow(GetHwnd());
-}
-
 // generate an artificial resize event
 void wxFrame::SendSizeEvent(int flags)
 {
@@ -385,7 +380,7 @@ void wxFrame::AttachMenuBar(wxMenuBar *menubar)
         // adjust for menu / titlebar height
         rc.bottom -= (2*menuHeight-1);
 
-        ::MoveWindow(Gethwnd(), rc.left, rc.top, rc.right, rc.bottom, FALSE);
+        ::MoveWindow(GetHwnd(), rc.left, rc.top, rc.right, rc.bottom, FALSE);
     }
 #endif
 
@@ -855,27 +850,38 @@ wxFrame::HandleMenuSelect(WXWORD nItem, WXWORD flags, WXHMENU WXUNUSED(hMenu))
     return false;
 }
 
-bool wxFrame::HandleMenuPopup(wxEventType evtType, WXHMENU hMenu)
+bool
+wxFrame::DoSendMenuOpenCloseEvent(wxEventType evtType, wxMenu* menu, bool popup)
 {
-    // we don't have the menu id here, so we use the id to specify if the event
-    // was from a popup menu or a normal one
+    wxMenuEvent event(evtType, popup ? wxID_ANY : 0, menu);
+    event.SetEventObject(menu);
+
+    return HandleWindowEvent(event);
+}
+
+bool wxFrame::HandleExitMenuLoop(WXWORD isPopup)
+{
+    return DoSendMenuOpenCloseEvent(wxEVT_MENU_CLOSE,
+                                    isPopup ? wxCurrentPopupMenu : NULL,
+                                    isPopup != 0);
+}
 
-    int menuid = 0;
+bool wxFrame::HandleMenuPopup(wxEventType evtType, WXHMENU hMenu)
+{
+    bool isPopup = false;
     wxMenu* menu = NULL;
-    if (GetMenuBar())
+    if ( wxCurrentPopupMenu && wxCurrentPopupMenu->GetHMenu() == hMenu )
     {
-        menu = GetMenuBar()->MSWGetMenu(hMenu);
+        menu = wxCurrentPopupMenu;
+        isPopup = true;
     }
-    else if ( wxCurrentPopupMenu && wxCurrentPopupMenu->GetHMenu() == hMenu )
+    else if ( GetMenuBar() )
     {
-        menu = wxCurrentPopupMenu;
-        menuid = wxID_ANY;
+        menu = GetMenuBar()->MSWGetMenu(hMenu);
     }
 
-    wxMenuEvent event(evtType, menuid, menu);
-    event.SetEventObject(this);
 
-    return HandleWindowEvent(event);
+    return DoSendMenuOpenCloseEvent(evtType, menu, isPopup);
 }
 
 #endif // wxUSE_MENUS
@@ -935,6 +941,16 @@ WXLRESULT wxFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lPara
             }
             break;
 
+        case WM_EXITMENULOOP:
+            // Under Windows 98 and 2000 and later we're going to get
+            // WM_UNINITMENUPOPUP which will be used to generate this event
+            // with more information (notably the menu that was closed) so we
+            // only need this one under old Windows systems where the newer
+            // event is never sent.
+            if ( wxGetWinVersion() < wxWinVersion_98 )
+                processed = HandleExitMenuLoop(wParam);
+            break;
+
         case WM_UNINITMENUPOPUP:
             processed = HandleMenuPopup(wxEVT_MENU_CLOSE, (WXHMENU)wParam);
             break;