// wxFrame: various geometry-related functions
// ----------------------------------------------------------------------------
-void wxFrame::Raise()
-{
- ::SetForegroundWindow(GetHwnd());
-}
-
// generate an artificial resize event
void wxFrame::SendSizeEvent(int flags)
{
// 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
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
}
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;