]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/frame.cpp
Compilaton fixes.
[wxWidgets.git] / src / msw / frame.cpp
index 3455129a19d7c5bd28bf5b028a2ef19c73a012e5..f17d23dddb1b9738a201e50e15465a24df9268c2 100644 (file)
@@ -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);
 }
-
-