]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/frame.cpp
Compile with EVC 3.0 2002
[wxWidgets.git] / src / msw / frame.cpp
index 3455129a19d7c5bd28bf5b028a2ef19c73a012e5..f2dff269be21019194ddedd6b5b7f5964d2f933b 100644 (file)
@@ -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
+