X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4676948b6814c97b93c431a8cbcd8c0352c87ba9..6ee3c06421446908fabe9de45b8e0c7519c28c24:/src/msw/frame.cpp diff --git a/src/msw/frame.cpp b/src/msw/frame.cpp index 3455129a19..f17d23dddb 100644 --- a/src/msw/frame.cpp +++ b/src/msw/frame.cpp @@ -106,9 +106,6 @@ void wxFrame::Init() #if wxUSE_TOOLTIPS m_hwndToolTip = 0; #endif -#ifdef __WXWINCE__ - m_commandBar = 0; -#endif // Data to save/restore when calling ShowFullScreen m_fsStatusBarFields = 0; @@ -140,14 +137,6 @@ wxFrame::~wxFrame() { m_isBeingDeleted = TRUE; DeleteAllBars(); -#ifdef __WXWINCE__ - if (m_commandBar) - { - ::DestroyWindow((HWND) m_commandBar); - m_commandBar = NULL; - } -#endif - } // ---------------------------------------------------------------------------- @@ -275,6 +264,7 @@ void wxFrame::AttachMenuBar(wxMenuBar *menubar) } else // set new non NULL menu bar { +#ifndef __WXWINCE__ // Can set a menubar several times. if ( menubar->GetHMenu() ) { @@ -290,7 +280,7 @@ void wxFrame::AttachMenuBar(wxMenuBar *menubar) return; } } - +#endif InternalSetMenuBar(); } } @@ -300,16 +290,14 @@ 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); - } - if (m_commandBar) + + if (!GetToolBar()) { - CommandBar_InsertMenubarEx((HWND) m_commandBar, wxGetInstance(), - (LPTSTR) (HMENU) m_hMenu, 0); + wxToolBar* toolBar = new wxToolBar(this, -1, + wxDefaultPosition, wxDefaultSize, + wxBORDER_NONE | wxTB_HORIZONTAL, + wxToolBarNameStr, GetMenuBar()); + SetToolBar(toolBar); } #else if ( !::SetMenu(GetHwnd(), (HMENU)m_hMenu) ) @@ -349,6 +337,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 +351,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 +380,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 +391,7 @@ bool wxFrame::ShowFullScreen(bool show, long style) theToolBar->SetSize(-1, m_fsToolBarHeight); theToolBar->Show(TRUE); } +#endif // __WXWINCE__ #endif // wxUSE_TOOLBAR #if wxUSE_STATUSBAR @@ -428,6 +424,11 @@ bool wxFrame::ShowFullScreen(bool show, long style) wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& name) { +#ifdef __WXWINCE__ + // We may already have a toolbar from calling SetMenuBar. + if (GetToolBar()) + return GetToolBar(); +#endif if ( wxFrameBase::CreateToolBar(style, id, name) ) { PositionToolBar(); @@ -441,6 +442,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 +478,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 +786,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 +801,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 +823,25 @@ 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); } - -