X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4676948b6814c97b93c431a8cbcd8c0352c87ba9..42d11c8e66149da692edaddcffc4c67cfa7ca496:/src/msw/frame.cpp diff --git a/src/msw/frame.cpp b/src/msw/frame.cpp index 3455129a19..f2dff269be 100644 --- a/src/msw/frame.cpp +++ b/src/msw/frame.cpp @@ -141,11 +141,7 @@ wxFrame::~wxFrame() m_isBeingDeleted = TRUE; DeleteAllBars(); #ifdef __WXWINCE__ - if (m_commandBar) - { - ::DestroyWindow((HWND) m_commandBar); - m_commandBar = NULL; - } + RemoveCommandBar(); #endif } @@ -300,16 +296,18 @@ void wxFrame::InternalSetMenuBar() #ifdef __WXMICROWIN__ // Nothing #elif defined(__WXWINCE__) - if (!m_commandBar) - { - // TODO: what identifer shall we use? - // TODO: eventually have a wxCommandBar class - m_commandBar = (WXHWND) CommandBar_Create(wxGetInstance(), GetHwnd(), 999); - } + + CreateCommandBar() ; + if (m_commandBar) { - CommandBar_InsertMenubarEx((HWND) m_commandBar, wxGetInstance(), - (LPTSTR) (HMENU) m_hMenu, 0); + if (!CommandBar_InsertMenubarEx((HWND) m_commandBar, NULL, + (LPTSTR) (HMENU) m_hMenu, 0)) + { + wxFAIL_MSG( _T("failed to set menubar") ); + return; + } + CommandBar_DrawMenuBar((HWND) m_commandBar, 0); } #else if ( !::SetMenu(GetHwnd(), (HMENU)m_hMenu) ) @@ -349,6 +347,9 @@ bool wxFrame::ShowFullScreen(bool show, long style) if (show) { #if wxUSE_TOOLBAR +#ifdef __WXWINCE__ + // TODO: hide commandbar +#else wxToolBar *theToolBar = GetToolBar(); if (theToolBar) theToolBar->GetSize(NULL, &m_fsToolBarHeight); @@ -360,6 +361,7 @@ bool wxFrame::ShowFullScreen(bool show, long style) theToolBar->SetSize(-1,0); theToolBar->Show(FALSE); } +#endif // __WXWINCE__ #endif // wxUSE_TOOLBAR // TODO: make it work for WinCE @@ -388,6 +390,9 @@ bool wxFrame::ShowFullScreen(bool show, long style) else { #if wxUSE_TOOLBAR +#ifdef __WXWINCE__ + // TODO: show commandbar +#else wxToolBar *theToolBar = GetToolBar(); // restore the toolbar, menubar, and statusbar @@ -396,6 +401,7 @@ bool wxFrame::ShowFullScreen(bool show, long style) theToolBar->SetSize(-1, m_fsToolBarHeight); theToolBar->Show(TRUE); } +#endif // __WXWINCE__ #endif // wxUSE_TOOLBAR #if wxUSE_STATUSBAR @@ -441,6 +447,12 @@ void wxFrame::PositionToolBar() wxToolBar *toolbar = GetToolBar(); if ( toolbar && toolbar->IsShown() ) { +#ifdef __WXWINCE__ + // We want to do something different in WinCE, because + // the toolbar should be associated with the commandbar, + // and not an independent window. + // TODO +#else // don't call our (or even wxTopLevelWindow) version because we want // the real (full) client area size, not excluding the tool/status bar int width, height; @@ -471,6 +483,7 @@ void wxFrame::PositionToolBar() // use the 'real' MSW position here, don't offset relativly to the // client area origin toolbar->SetSize(0, 0, tw, th, wxSIZE_NO_ADJUSTMENTS); +#endif // __WXWINCE__ } } @@ -778,6 +791,10 @@ long wxFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) processed = HandlePaint(); break; + case WM_INITMENUPOPUP: + processed = HandleInitMenuPopup((WXHMENU) wParam); + break; + #if !defined(__WXMICROWIN__) && !defined(__WXWINCE__) case WM_MENUSELECT: { @@ -789,10 +806,6 @@ long wxFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) } break; - case WM_INITMENU: - processed = HandleInitMenu(); - break; - case WM_EXITMENULOOP: processed = HandleMenuLoop(wxEVT_MENU_CLOSE, wParam); break; @@ -815,13 +828,52 @@ long wxFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) return rc; } -// handle WM_INITMENU message -bool wxFrame::HandleInitMenu() +// handle WM_INITMENUPOPUP message +bool wxFrame::HandleInitMenuPopup(WXHMENU hMenu) { - wxMenuEvent event(wxEVT_MENU_OPEN, 0); + wxMenu* menu = NULL; + if (GetMenuBar()) + { + int nCount = GetMenuBar()->GetMenuCount(); + for (int n = 0; n < nCount; n++) + { + if (GetMenuBar()->GetMenu(n)->GetHMenu() == hMenu) + { + menu = GetMenuBar()->GetMenu(n); + break; + } + } + } + + wxMenuEvent event(wxEVT_MENU_OPEN, 0, menu); event.SetEventObject(this); return GetEventHandler()->ProcessEvent(event); } +#ifdef __WXWINCE__ +WXHWND wxFrame::CreateCommandBar() +{ + if (m_commandBar) + return m_commandBar; + + m_commandBar = (WXHWND) CommandBar_Create(wxGetInstance(), GetHwnd(), NewControlId()); + if (!m_commandBar) + { + wxFAIL_MSG( _T("failed to create commandbar") ); + return 0; + } + return m_commandBar; +} + +void wxFrame::RemoveCommandBar() +{ + if (m_commandBar) + { + ::DestroyWindow((HWND) m_commandBar); + m_commandBar = NULL; + } +} +#endif +