#include <string.h>
extern wxList wxModelessWindows;
+extern wxMenu *wxCurrentPopupMenu;
#define IDM_WINDOWTILE 4001
#define IDM_WINDOWCASCADE 4002
m_currentChild = NULL;
m_windowMenu = 0;
m_parentFrameActive = TRUE;
- m_frameToolBar = NULL ;
}
bool wxMDIParentFrame::Create(wxWindow *parent,
- const wxWindowID id,
+ wxWindowID id,
const wxString& title,
const wxPoint& pos,
const wxSize& size,
- const long style,
+ long style,
const wxString& name)
{
m_defaultIcon = (WXHICON) (wxSTD_MDIPARENTFRAME_ICON ? wxSTD_MDIPARENTFRAME_ICON : wxDEFAULT_MDIPARENTFRAME_ICON);
- m_frameToolBar = NULL ;
m_clientWindow = NULL;
m_currentChild = NULL;
m_windowMenu = 0;
m_windowMenu = (WXHMENU) ::LoadMenu(wxGetInstance(), "wxWindowMenu");
-#if DEBUG > 1
+#if WXDEBUG > 1
wxDebugMsg("Loaded m_windowMenu %d\n", m_windowMenu);
#endif
- // Adding WS_CLIPCHILDREN causes children not to be properly
- // drawn when first displaying them.
- DWORD msflags = WS_OVERLAPPED ; // | WS_CLIPCHILDREN ;
+ DWORD msflags = WS_OVERLAPPED ;
if (style & wxMINIMIZE_BOX)
msflags |= WS_MINIMIZEBOX;
if (style & wxMAXIMIZE_BOX)
msflags |= WS_MAXIMIZE;
if (style & wxCAPTION)
msflags |= WS_CAPTION;
- if (style & wxCLIP_CHILDREN)
- msflags |= WS_CLIPCHILDREN;
+
+ // Adding WS_CLIPCHILDREN causes children not to be properly
+ // drawn when first displaying them.
+// if (style & wxCLIP_CHILDREN)
+// msflags |= WS_CLIPCHILDREN;
wxWindow::MSWCreate(m_windowId, parent, wxMDIFrameClassName, this, title, x, y, width, height,
msflags);
int cwidth = rect.right;
int cheight = rect.bottom;
-/*
- if (m_frameToolBar)
- {
- int tw, th;
- m_frameToolBar->GetSize(&tw, &th);
- cheight -= th;
- }
-*/
+
if ( GetStatusBar() )
{
int sw, sh;
cheight -= sh;
}
+ wxPoint pt(GetClientAreaOrigin());
+ cheight -= pt.y;
+ cwidth -= pt.x;
+
*x = cwidth;
*y = cheight;
}
int y = 0;
int width, height;
GetClientSize(&width, &height);
- if ( GetToolBar() )
- {
- int wt, ht;
- GetToolBar()->GetSize(&wt, &ht);
- height -= ht;
- y += ht;
- GetToolBar()->SetSize(0, 0, width, ht);
- }
if ( GetClientWindow() )
GetClientWindow()->SetSize(x, y, width, height);
+/* Already done in MSWOnSize
// forward WM_SIZE to status bar control
#if USE_NATIVE_STATUSBAR
if (m_frameStatusBar && m_frameStatusBar->IsKindOf(CLASSINFO(wxStatusBar95)))
((wxStatusBar95 *)m_frameStatusBar)->OnSize(event);
#endif
+*/
+
}
void wxMDIParentFrame::OnActivate(wxActivateEvent& event)
}
#if WXWIN_COMPATIBILITY
+/*
void wxMDIParentFrame::OldOnSize(int x, int y)
{
#if WXWIN_COMPATIBILITY == 1
#else
#endif
}
+*/
#endif
void wxMDIParentFrame::MSWOnCreate(WXLPCREATESTRUCT WXUNUSED(cs))
{
- m_clientWindow = new wxMDIClientWindow;
+ m_clientWindow = OnCreateClient();
// Uses own style for client style
m_clientWindow->CreateClient(this, GetWindowStyleFlag());
}
-void wxMDIParentFrame::MSWOnSize(const int x, const int y, const WXUINT id)
+void wxMDIParentFrame::MSWOnSize(int x, int y, WXUINT id)
{
switch (id)
{
#endif
PositionStatusBar();
+ PositionToolBar();
- GetEventHandler()->OldOnSize(x, y);
+ wxSizeEvent event(wxSize(x, y), m_windowId);
+ event.SetEventObject( this );
+ if (!GetEventHandler()->ProcessEvent(event))
+ Default();
}
}
-bool wxMDIParentFrame::MSWOnActivate(const int state, const bool minimized, const WXHWND activate)
+bool wxMDIParentFrame::MSWOnActivate(int state, bool minimized, WXHWND activate)
{
wxWindow::MSWOnActivate(state, minimized, activate);
// to the current child.
if ((m_currentChild != NULL) && ((state == WA_ACTIVE) || (state == WA_CLICKACTIVE)))
{
-#if WXWIN_COMPATIBILITY
- m_currentChild->GetEventHandler()->OldOnActivate(TRUE);
-#else
- wxActivateEvent event(wxEVT_ACTIVATE, TRUE,
- m_currentChild.m_windowId);
- event.eventObject = m_currentChild;
- m_currentChild->GetEventHandler()->ProcessEvent(event);
-#endif
+ wxActivateEvent event(wxEVT_ACTIVATE, TRUE, m_currentChild->GetId());
+ event.SetEventObject( m_currentChild );
+ m_currentChild->GetEventHandler()->ProcessEvent(event);
}
return 0;
}
-bool wxMDIParentFrame::MSWOnCommand(const WXWORD id, const WXWORD cmd, const WXHWND control)
+bool wxMDIParentFrame::MSWOnCommand(WXWORD id, WXWORD cmd, WXHWND control)
{
- if (cmd == 0)
+// if (cmd == 0) // Why did I do this test?
{
// In case it's e.g. a toolbar.
wxWindow *win = wxFindWinFromHandle(control);
if (win)
return win->MSWCommand(cmd, id);
+ if (wxCurrentPopupMenu)
+ {
+ wxMenu *popupMenu = wxCurrentPopupMenu;
+ wxCurrentPopupMenu = NULL;
+ if (!popupMenu->MSWCommand(cmd, id))
+ return TRUE;
+ }
+
switch (id)
{
case IDM_WINDOWCASCADE:
}
if (id >= 0xF000)
{
-#if DEBUG > 1
+#if WXDEBUG > 1
wxDebugMsg("wxMDIFrame::OnCommand %d: system command: calling default window proc\n", GetHWND());
#endif
return FALSE; // Get WndProc to call default proc
}
else if (m_currentChild && (id < wxFIRST_MDI_CHILD || id > wxLAST_MDI_CHILD))
{
-#if DEBUG > 1
+#if WXDEBUG > 1
wxDebugMsg("wxMDIFrame::MSWOnCommand %d: calling child OnCommand\n", GetHWND());
#endif
return m_currentChild->MSWOnCommand(id, cmd, control);
return FALSE;
}
-void wxMDIParentFrame::MSWOnMenuHighlight(const WXWORD nItem, const WXWORD nFlags, const WXHMENU hSysMenu)
+void wxMDIParentFrame::MSWOnMenuHighlight(WXWORD nItem, WXWORD nFlags, WXHMENU hSysMenu)
{
if (m_parentFrameActive)
{
- // TODO
if (nFlags == 0xFFFF && hSysMenu == (WXHMENU) NULL)
- GetEventHandler()->OldOnMenuSelect(-1);
+ {
+ wxMenuEvent event(wxEVT_MENU_HIGHLIGHT, -1);
+ event.SetEventObject( this );
+ GetEventHandler()->ProcessEvent(event);
+ }
else if (nFlags != MF_SEPARATOR)
- GetEventHandler()->OldOnMenuSelect(nItem);
+ {
+ wxMenuEvent event(wxEVT_MENU_HIGHLIGHT, nItem);
+ event.SetEventObject( this );
+ GetEventHandler()->ProcessEvent(event);
+ }
}
else if (m_currentChild)
{
if ((m_currentChild != (wxWindow *)NULL) && (m_currentChild->GetHWND() != (WXHWND) NULL) && m_currentChild->MSWProcessMessage(msg))
return TRUE;
- if (m_acceleratorTable != (WXHANDLE) NULL &&
- ::TranslateAccelerator((HWND) GetHWND(), (HANDLE) m_acceleratorTable, pMsg))
+ return FALSE;
+}
+
+bool wxMDIParentFrame::MSWTranslateMessage(WXMSG* msg)
+{
+ MSG *pMsg = (MSG *)msg;
+
+ if ((m_currentChild != (wxWindow *)NULL) && (m_currentChild->GetHWND() != (WXHWND) NULL) && m_currentChild->MSWTranslateMessage(msg))
+ return TRUE;
+
+ if (m_acceleratorTable.Ok() &&
+ ::TranslateAccelerator((HWND) GetHWND(), (HACCEL) m_acceleratorTable.GetHACCEL(), pMsg))
return TRUE;
if (pMsg->message == WM_KEYDOWN || pMsg->message == WM_SYSKEYDOWN)
return FALSE;
}
-bool wxMDIParentFrame::MSWOnEraseBkgnd(const WXHDC WXUNUSED(pDC))
+
+bool wxMDIParentFrame::MSWOnEraseBkgnd(WXHDC WXUNUSED(pDC))
{
return TRUE;
}
}
bool wxMDIChildFrame::Create(wxMDIParentFrame *parent,
- const wxWindowID id,
+ wxWindowID id,
const wxString& title,
const wxPoint& pos,
const wxSize& size,
- const long style,
+ long style,
const wxString& name)
{
m_defaultIcon = (WXHICON) (wxSTD_MDICHILDFRAME_ICON ? wxSTD_MDICHILDFRAME_ICON : wxDEFAULT_MDICHILDFRAME_ICON);
// Set the client size (i.e. leave the calculation of borders etc.
// to wxWindows)
-void wxMDIChildFrame::SetClientSize(const int width, const int height)
+void wxMDIChildFrame::SetClientSize(int width, int height)
{
HWND hWnd = (HWND) GetHWND();
::ScreenToClient((HWND) mdiParent->GetClientWindow()->GetHWND(), &point);
MoveWindow(hWnd, point.x, point.y, actual_width, actual_height, (BOOL)TRUE);
-#if WXWIN_COMPATIBILITY
- GetEventHandler()->OldOnSize(width, height);
-#else
+
wxSizeEvent event(wxSize(width, height), m_windowId);
- event.eventObject = this;
+ event.SetEventObject( this );
GetEventHandler()->ProcessEvent(event);
-#endif
}
void wxMDIChildFrame::GetPosition(int *x, int *y) const
wxMDIParentFrame *parent = (wxMDIParentFrame *)GetParent();
parent->m_parentFrameActive = FALSE;
- HMENU subMenu = GetSubMenu((HWND) parent->GetWindowMenu(), 0);
+ HMENU subMenu = GetSubMenu((HMENU) parent->GetWindowMenu(), 0);
// Try to insert Window menu in front of Help, otherwise append it.
int N = GetMenuItemCount(menu);
}
static HWND invalidHandle = 0;
-void wxMDIChildFrame::MSWOnSize(const int x, const int y, const WXUINT id)
+void wxMDIChildFrame::MSWOnSize(int x, int y, WXUINT id)
{
if (!GetHWND()) return;
if (invalidHandle == (HWND) GetHWND())
{
-#if DEBUG > 1
+#if WXDEBUG > 1
wxDebugMsg("wxMDIChildFrame::OnSize %d: invalid, so returning.\n", GetHWND());
#endif
return;
#endif
PositionStatusBar();
+ PositionToolBar();
wxWindow::MSWOnSize(x, y, id);
}
}
-bool wxMDIChildFrame::MSWOnCommand(const WXWORD id, const WXWORD cmd, const WXHWND control)
+bool wxMDIChildFrame::MSWOnCommand(WXWORD id, WXWORD cmd, WXHWND control)
{
-#if DEBUG > 1
+#if WXDEBUG > 1
wxDebugMsg("wxMDIChildFrame::MSWOnCommand %d\n", GetHWND());
#endif
- if ((cmd == 0) && GetHWND())
+// if ((cmd == 0) && GetHWND())
+ if (GetHWND())
{
// In case it's e.g. a toolbar.
wxWindow *win = wxFindWinFromHandle(control);
if (win)
return win->MSWCommand(cmd, id);
+ if (wxCurrentPopupMenu)
+ {
+ wxMenu *popupMenu = wxCurrentPopupMenu;
+ wxCurrentPopupMenu = NULL;
+ if (popupMenu->MSWCommand(cmd, id))
+ return TRUE;
+ }
+
if (GetMenuBar() && GetMenuBar()->FindItemForId(id))
{
ProcessCommand(id);
}
bool wxMDIChildFrame::MSWProcessMessage(WXMSG *msg)
+{
+ return FALSE;
+}
+
+bool wxMDIChildFrame::MSWTranslateMessage(WXMSG* msg)
{
MSG *pMsg = (MSG *)msg;
- if (m_acceleratorTable && GetHWND())
+ if (m_acceleratorTable.Ok())
{
wxFrame *parent = (wxFrame *)GetParent();
HWND parent_hwnd = (HWND) parent->GetHWND();
- return (::TranslateAccelerator(parent_hwnd, (HANDLE) m_acceleratorTable, pMsg) != 0);
+ return (::TranslateAccelerator(parent_hwnd, (HACCEL) m_acceleratorTable.GetHACCEL(), pMsg) != 0);
}
+
return FALSE;
}
-long wxMDIChildFrame::MSWOnMDIActivate(const long activate, const WXHWND WXUNUSED(one), const WXHWND WXUNUSED(two))
+long wxMDIChildFrame::MSWOnMDIActivate(long activate, WXHWND WXUNUSED(one), WXHWND WXUNUSED(two))
{
wxMDIParentFrame *parent = (wxMDIParentFrame *)GetParent();
HMENU parent_menu = (HMENU) parent->GetWinMenu();
-#if DEBUG > 1
+#if WXDEBUG > 1
wxDebugMsg("Parent menu is %d\n", parent_menu);
#endif
HMENU child_menu = (HMENU) GetWinMenu();
-#if DEBUG > 1
+#if WXDEBUG > 1
wxDebugMsg("Child menu is %d\n", child_menu);
#endif
{
parent->m_parentFrameActive = FALSE;
HMENU subMenu = GetSubMenu((HMENU) parent->GetWindowMenu(), 0);
-#if DEBUG > 1
+#if WXDEBUG > 1
wxDebugMsg("Window submenu is %d\n", subMenu);
#endif
// HMENU subMenu = 0;
::DrawMenuBar((HWND) parent->GetHWND());
}
- GetEventHandler()->OldOnActivate(TRUE);
+ wxActivateEvent event(wxEVT_ACTIVATE, TRUE, m_windowId);
+ event.SetEventObject( this );
+ GetEventHandler()->ProcessEvent(event);
}
else
{
if (parent->m_currentChild == this)
parent->m_currentChild = NULL;
- GetEventHandler()->OldOnActivate(FALSE);
+
+ wxActivateEvent event(wxEVT_ACTIVATE, FALSE, m_windowId);
+ event.SetEventObject( this );
+ GetEventHandler()->ProcessEvent(event);
// m_active = FALSE;
if (parent_menu)
{
parent->m_parentFrameActive = TRUE;
HMENU subMenu = GetSubMenu((HMENU) parent->GetWindowMenu(), 0);
-#if DEBUG > 1
+#if WXDEBUG > 1
wxDebugMsg("Window submenu is %d\n", subMenu);
#endif
// HMENU subMenu = 0;
::DrawMenuBar((HWND) parent->GetHWND());
}
}
- // TODO
bool flag = (activate != 0);
- GetEventHandler()->OldOnActivate(flag);
-#if DEBUG > 1
+ wxActivateEvent event(wxEVT_ACTIVATE, flag, m_windowId);
+ event.SetEventObject( this );
+ GetEventHandler()->ProcessEvent(event);
+
+#if WXDEBUG > 1
wxDebugMsg("Finished (de)activating\n");
#endif
return 0;
// destroyed.
HWND oldHandle = (HWND)GetHWND();
-#if DEBUG > 1
+#if WXDEBUG > 1
wxDebugMsg("*** About to DestroyWindow MDI child %d\n", oldHandle);
#endif
#ifdef __WIN32__
#else
SendMessage((HWND) parent->GetClientWindow()->GetHWND(), WM_MDIDESTROY, (HWND)oldHandle, 0);
#endif
-#if DEBUG > 1
+#if WXDEBUG > 1
wxDebugMsg("*** Finished DestroyWindow MDI child %d\n", oldHandle);
#endif
invalidHandle = 0;
{
}
-bool wxMDIClientWindow::CreateClient(wxMDIParentFrame *parent, const long style)
+bool wxMDIClientWindow::CreateClient(wxMDIParentFrame *parent, long style)
{
m_backgroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE);
long wxMDIClientWindow::MSWDefWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
{
if ( MSWGetOldWndProc() != 0)
- return ::CallWindowProc(CASTWNDPROC (FARPROC) MSWGetOldWndProc(), (HWND) GetHWND(), (UINT) nMsg, (WPARAM) wParam, (LPARAM) lParam);
+ return ::CallWindowProc((FARPROC)MSWGetOldWndProc(), (HWND) GetHWND(), (UINT) nMsg, (WPARAM) wParam, (LPARAM) lParam);
else
return ::DefWindowProc((HWND) m_hWnd, (UINT) nMsg, (WPARAM) wParam, (LPARAM) lParam);
}
}
// Should hand the message to the default proc
-long wxMDIClientWindow::MSWOnMDIActivate(const long bActivate, const WXHWND, const WXHWND)
+long wxMDIClientWindow::MSWOnMDIActivate(long bActivate, WXHWND, WXHWND)
{
return Default();
}