/////////////////////////////////////////////////////////////////////////////
-// Name: msw/frame.cpp
+// Name: src/msw/frame.cpp
// Purpose: wxFrame
// Author: Julian Smart
// Modified by:
// headers
// ----------------------------------------------------------------------------
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma implementation "frame.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#pragma hdrstop
#endif
+#include "wx/frame.h"
+
#ifndef WX_PRECOMP
- #include "wx/frame.h"
+ #include "wx/msw/wrapcctl.h" // include <commctrl.h> "properly"
#include "wx/app.h"
#include "wx/menu.h"
#include "wx/utils.h"
#include "wx/dcclient.h"
#include "wx/mdi.h"
#include "wx/panel.h"
+ #include "wx/log.h"
+ #include "wx/toolbar.h"
+ #include "wx/statusbr.h"
+ #include "wx/menuitem.h"
#endif // WX_PRECOMP
#include "wx/msw/private.h"
-#ifdef __WXWINCE__
-#include <commctrl.h>
+#if defined(__POCKETPC__) || defined(__SMARTPHONE__)
+ #include <ole2.h>
+ #include <aygshell.h>
+ #include "wx/msw/winundef.h"
#endif
-#if wxUSE_STATUSBAR
- #include "wx/statusbr.h"
- #include "wx/generic/statusbr.h"
-#endif // wxUSE_STATUSBAR
-
-#if wxUSE_TOOLBAR
- #include "wx/toolbar.h"
-#endif // wxUSE_TOOLBAR
-
-#include "wx/menuitem.h"
-#include "wx/log.h"
+#include "wx/generic/statusbr.h"
#ifdef __WXUNIVERSAL__
#include "wx/univ/theme.h"
// frame styles
wxFLAGS_MEMBER(wxSTAY_ON_TOP)
wxFLAGS_MEMBER(wxCAPTION)
+#if WXWIN_COMPATIBILITY_2_6
wxFLAGS_MEMBER(wxTHICK_FRAME)
+#endif // WXWIN_COMPATIBILITY_2_6
wxFLAGS_MEMBER(wxSYSTEM_MENU)
wxFLAGS_MEMBER(wxRESIZE_BORDER)
+#if WXWIN_COMPATIBILITY_2_6
wxFLAGS_MEMBER(wxRESIZE_BOX)
+#endif // WXWIN_COMPATIBILITY_2_6
wxFLAGS_MEMBER(wxCLOSE_BOX)
wxFLAGS_MEMBER(wxMAXIMIZE_BOX)
wxFLAGS_MEMBER(wxMINIMIZE_BOX)
SetOwnBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE));
-#if defined(__SMARTPHONE__) && defined(__WXWINCE__)
+#if defined(__SMARTPHONE__)
SetLeftMenu(wxID_EXIT, _("Done"));
#endif
+#if wxUSE_ACCEL && defined(__POCKETPC__)
+ // The guidelines state that Ctrl+Q should quit the app.
+ // Let's define an accelerator table to send wxID_EXIT.
+ wxAcceleratorEntry entries[1];
+ entries[0].Set(wxACCEL_CTRL, 'Q', wxID_EXIT);
+ wxAcceleratorTable accel(1, entries);
+ SetAcceleratorTable(accel);
+#endif // wxUSE_ACCEL && __POCKETPC__
+
return true;
}
if ( y )
*y -= pt.y;
-
+#if wxUSE_TOOLBAR
+ if( y )
+ {
+ wxToolBar *toolbar = GetToolBar();
+ if( toolbar && toolbar->HasFlag( wxTB_BOTTOM ) )
+ {
+ *y -= toolbar->GetClientSize().y;
+ }
+ }
+#endif
#if wxUSE_STATUSBAR
// adjust client area height to take the status bar into account
if ( y )
int w, h;
GetClientSize(&w, &h);
+#if wxUSE_TOOLBAR
+ wxToolBar *toolbar = GetToolBar();
+ if( toolbar && toolbar->HasFlag( wxTB_BOTTOM ) )
+ h += toolbar->GetClientRect().height;
+#endif
int sw, sh;
m_frameStatusBar->GetSize(&sw, &sh);
#elif defined(WINCE_WITHOUT_COMMANDBAR)
if (!GetToolBar())
{
- wxToolBar* toolBar = new wxToolBar(this, wxID_ANY,
+ wxToolMenuBar* toolBar = new wxToolMenuBar(this, wxID_ANY,
wxDefaultPosition, wxDefaultSize,
wxBORDER_NONE | wxTB_HORIZONTAL,
wxToolBarNameStr, menubar);
}
#endif // wxUSE_TOOLBAR
- if ((m_fsStyle & wxFULLSCREEN_NOMENUBAR) && m_hMenu)
- ::SetMenu(GetHwnd(), (HMENU)m_hMenu);
+ if (m_fsStyle & wxFULLSCREEN_NOMENUBAR)
+ {
+ WXHMENU menu = m_hMenu;
+
+#if wxUSE_MDI_ARCHITECTURE
+ wxMDIParentFrame *frame = wxDynamicCast(this, wxMDIParentFrame);
+ if (frame)
+ {
+ wxMDIChildFrame *child = frame->GetActiveChild();
+ if (child)
+ {
+ menu = child->GetWinMenu();
+ }
+ }
+#endif // wxUSE_MDI_ARCHITECTURE
+
+ if (menu)
+ {
+ ::SetMenu(GetHwnd(), (HMENU)menu);
+ }
+ }
#if wxUSE_STATUSBAR
wxStatusBar *theStatusBar = GetStatusBar();
void wxFrame::PositionToolBar()
{
+ int x = 0, y = 0;
wxToolBar *toolbar = GetToolBar();
if ( toolbar && toolbar->IsShown() )
{
height -= statbar->GetClientSize().y;
}
#endif // wxUSE_STATUSBAR
-
- int x = 0;
- int y = 0;
+ int tx, ty, tw, th;
+ toolbar->GetPosition( &tx, &ty );
+ toolbar->GetSize( &tw, &th );
+ if( ( toolbar->GetWindowStyleFlag() & wxTB_HORIZONTAL ) || ( toolbar->GetWindowStyleFlag() & wxTB_VERTICAL ) )
+ {
+ x = 0;
+ y = 0;
+ }
+ else if( toolbar->GetWindowStyleFlag() & wxTB_BOTTOM )
+ {
+ x = 0;
+ y = height - th;
+ }
#if defined(WINCE_WITH_COMMANDBAR)
// We're using a commandbar - so we have to allow for it.
if (GetMenuBar() && GetMenuBar()->GetCommandBar())
y = rect.bottom - rect.top;
}
#endif
-
- int tx, ty;
- int tw, th;
- toolbar->GetPosition(&tx, &ty);
- toolbar->GetSize(&tw, &th);
-
+ if( ( toolbar->GetWindowStyleFlag() & wxTB_HORIZONTAL ) || ( toolbar->GetWindowStyleFlag() & wxTB_VERTICAL ) )
+ {
// Adjust
if (ty < 0 && (-ty == th))
ty = 0;
if (tx < 0 && (-tx == tw))
tx = 0;
+ }
+ else if( toolbar->GetWindowStyleFlag() & wxTB_BOTTOM )
+ {
+ if( ty < 0 && ( -ty == th ) )
+ ty = height - th;
+ if( tx < 0 && ( -tx == tw ) )
+ tx = 0;
+ }
int desiredW = tw;
int desiredH = th;
// them appear in the taskbar because they are, by virtue of this
// style, not managed by the taskbar - instead leave Windows take care
// of them
-#ifdef __WIN95__
if ( win->GetWindowStyle() & wxFRAME_TOOL_WINDOW )
continue;
-#endif // Win95
// the child MDI frames are a special case and should not be touched by
// the parent frame - instead, they are managed by the user
wxFrame *frame = wxDynamicCast(win, wxFrame);
if ( frame
#if wxUSE_MDI_ARCHITECTURE
- && !wxDynamicCast(frame, wxMDIChildFrame)
+ && !frame->IsMDIChild()
#endif // wxUSE_MDI_ARCHITECTURE
)
{
// preprocessing
// ---------------------------------------------------------------------------
-bool wxFrame::MSWTranslateMessage(WXMSG* pMsg)
+bool wxFrame::MSWDoTranslateMessage(wxFrame *frame, WXMSG *pMsg)
{
if ( wxWindow::MSWTranslateMessage(pMsg) )
return true;
#if wxUSE_MENUS && wxUSE_ACCEL && !defined(__WXUNIVERSAL__)
// try the menu bar accels
wxMenuBar *menuBar = GetMenuBar();
- if ( !menuBar )
- return false;
+ if ( menuBar )
+ {
+ const wxAcceleratorTable& acceleratorTable = menuBar->GetAccelTable();
+ return acceleratorTable.Translate(frame, pMsg);
+ }
+#endif // wxUSE_MENUS && wxUSE_ACCEL
- const wxAcceleratorTable& acceleratorTable = menuBar->GetAccelTable();
- return acceleratorTable.Translate(this, pMsg);
-#else
return false;
-#endif // wxUSE_MENUS && wxUSE_ACCEL
}
// ---------------------------------------------------------------------------
{
pt.x += w;
}
- else
+ else if( !( toolbar->GetWindowStyleFlag() & wxTB_BOTTOM ) )
{
pt.y += h;
}