#include "wx/msw/private.h"
+#ifdef __WXWINCE__
+#include <commctrl.h>
+#endif
+
#if wxUSE_STATUSBAR
#include "wx/statusbr.h"
#include "wx/generic/statusbr.h"
#if wxUSE_TOOLTIPS
m_hwndToolTip = 0;
#endif
+#ifdef __WXWINCE__
+ m_commandBar = 0;
+#endif
// Data to save/restore when calling ShowFullScreen
m_fsStatusBarFields = 0;
wxFrame::~wxFrame()
{
m_isBeingDeleted = TRUE;
-
DeleteAllBars();
+#ifdef __WXWINCE__
+ RemoveCommandBar();
+#endif
+
}
// ----------------------------------------------------------------------------
void wxFrame::Raise()
{
-#ifdef __WIN16__
- // no SetForegroundWindow() in Win16
- wxFrameBase::Raise();
-#else // Win32
::SetForegroundWindow(GetHwnd());
-#endif // Win16/32
}
// generate an artificial resize event
void wxFrame::InternalSetMenuBar()
{
-#ifndef __WXMICROWIN__
+#ifdef __WXMICROWIN__
+ // Nothing
+#elif defined(__WXWINCE__)
+
+ CreateCommandBar() ;
+
+ if (m_commandBar)
+ {
+ 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) )
{
wxLogLastError(wxT("SetMenu"));
if (show)
{
#if wxUSE_TOOLBAR
+#ifdef __WXWINCE__
+ // TODO: hide commandbar
+#else
wxToolBar *theToolBar = GetToolBar();
if (theToolBar)
theToolBar->GetSize(NULL, &m_fsToolBarHeight);
theToolBar->SetSize(-1,0);
theToolBar->Show(FALSE);
}
+#endif // __WXWINCE__
#endif // wxUSE_TOOLBAR
-#ifndef __WXMICROWIN__
+ // TODO: make it work for WinCE
+#if !defined(__WXMICROWIN__) && !defined(__WXWINCE__)
if (style & wxFULLSCREEN_NOMENUBAR)
SetMenu((HWND)GetHWND(), (HMENU) NULL);
#endif
else
{
#if wxUSE_TOOLBAR
+#ifdef __WXWINCE__
+ // TODO: show commandbar
+#else
wxToolBar *theToolBar = GetToolBar();
// restore the toolbar, menubar, and statusbar
theToolBar->SetSize(-1, m_fsToolBarHeight);
theToolBar->Show(TRUE);
}
+#endif // __WXWINCE__
#endif // wxUSE_TOOLBAR
#if wxUSE_STATUSBAR
}
#endif // wxUSE_STATUSBAR
-#ifndef __WXMICROWIN__
+ // TODO: make it work for WinCE
+#if !defined(__WXMICROWIN__) && !defined(__WXWINCE__)
if ((m_fsStyle & wxFULLSCREEN_NOMENUBAR) && (m_hMenu != 0))
SetMenu((HWND)GetHWND(), (HMENU)m_hMenu);
#endif
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;
// 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__
}
}
// on the desktop, but are iconized/restored with it
void wxFrame::IconizeChildFrames(bool bIconize)
{
- for ( wxWindowList::Node *node = GetChildren().GetFirst();
+ for ( wxWindowList::compatibility_iterator node = GetChildren().GetFirst();
node;
node = node->GetNext() )
{
RECT rect;
if ( GetUpdateRect(GetHwnd(), &rect, FALSE) )
{
-#ifndef __WXMICROWIN__
+#if !defined(__WXMICROWIN__) && !defined(__WXWINCE__)
if ( m_iconized )
{
const wxIcon& icon = GetIcon();
bool wxFrame::HandleSize(int x, int y, WXUINT id)
{
bool processed = FALSE;
-#ifndef __WXMICROWIN__
+#if !defined(__WXMICROWIN__) && !defined(__WXWINCE__)
switch ( id )
{
processed = HandlePaint();
break;
-#ifndef __WXMICROWIN__
+ case WM_INITMENUPOPUP:
+ processed = HandleInitMenuPopup((WXHMENU) wParam);
+ break;
+
+#if !defined(__WXMICROWIN__) && !defined(__WXWINCE__)
case WM_MENUSELECT:
{
WXWORD item, flags;
}
break;
-#ifndef __WIN16__
- case WM_ENTERMENULOOP:
- processed = HandleMenuLoop(wxEVT_MENU_OPEN, wParam);
- break;
-
case WM_EXITMENULOOP:
processed = HandleMenuLoop(wxEVT_MENU_CLOSE, wParam);
break;
-#endif // __WIN16__
case WM_QUERYDRAGICON:
{
return rc;
}
+// handle WM_INITMENUPOPUP message
+bool wxFrame::HandleInitMenuPopup(WXHMENU hMenu)
+{
+ 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
+
+