#include "wx/mdi.h"
#include "wx/msw/private.h"
-#if USE_NATIVE_STATUSBAR
+#if wxUSE_NATIVE_STATUSBAR
#include <wx/msw/statbr95.h>
#endif
#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,
{
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
- wxDebugMsg("Loaded m_windowMenu %d\n", m_windowMenu);
-#endif
-
DWORD msflags = WS_OVERLAPPED ;
if (style & wxMINIMIZE_BOX)
msflags |= WS_MINIMIZEBOX;
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;
}
void wxMDIParentFrame::OnSize(wxSizeEvent& event)
{
-#if USE_CONSTRAINTS
+#if wxUSE_CONSTRAINTS
if (GetAutoLayout())
Layout();
#endif
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 wxUSE_NATIVE_STATUSBAR
if (m_frameStatusBar && m_frameStatusBar->IsKindOf(CLASSINFO(wxStatusBar95)))
((wxStatusBar95 *)m_frameStatusBar)->OnSize(event);
#endif
+*/
+
}
void wxMDIParentFrame::OnActivate(wxActivateEvent& event)
GetEventHandler()->ProcessEvent(event);
#else
-#if USE_CONSTRAINTS
+#if wxUSE_CONSTRAINTS
if (GetAutoLayout())
Layout();
#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());
}
if (!m_iconized)
{
// forward WM_SIZE to status bar control
-#if USE_NATIVE_STATUSBAR
+#if wxUSE_NATIVE_STATUSBAR
if (m_frameStatusBar && m_frameStatusBar->IsKindOf(CLASSINFO(wxStatusBar95)))
{
wxSizeEvent event(wxSize(x, y), m_frameStatusBar->GetId());
#endif
PositionStatusBar();
+ PositionToolBar();
wxSizeEvent event(wxSize(x, y), m_windowId);
event.SetEventObject( this );
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
- 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
- wxDebugMsg("wxMDIFrame::MSWOnCommand %d: calling child OnCommand\n", GetHWND());
-#endif
return m_currentChild->MSWOnCommand(id, cmd, control);
}
}
if (id >= wxFIRST_MDI_CHILD && id <= wxLAST_MDI_CHILD)
{
- wxNode* node = GetChildren()->First();
+ wxNode* node = GetChildren().First();
while (node)
{
wxWindow* child = (wxWindow*) node->Data();
}
bool wxMDIParentFrame::MSWProcessMessage(WXMSG* msg)
+{
+ if ((m_currentChild != (wxWindow *)NULL) && (m_currentChild->GetHWND() != (WXHWND) NULL) && m_currentChild->MSWProcessMessage(msg))
+ return TRUE;
+
+ return FALSE;
+}
+
+bool wxMDIParentFrame::MSWTranslateMessage(WXMSG* msg)
{
MSG *pMsg = (MSG *)msg;
- if ((m_currentChild != (wxWindow *)NULL) && (m_currentChild->GetHWND() != (WXHWND) NULL) && m_currentChild->MSWProcessMessage(msg))
+ if ((m_currentChild != (wxWindow *)NULL) && (m_currentChild->GetHWND() != (WXHWND) NULL) && m_currentChild->MSWTranslateMessage(msg))
return TRUE;
- if (m_acceleratorTable != (WXHANDLE) NULL &&
- ::TranslateAccelerator((HWND) GetHWND(), (HANDLE) m_acceleratorTable, pMsg))
+ 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(WXHDC WXUNUSED(pDC))
{
return TRUE;
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);
if (invalidHandle == (HWND) GetHWND())
{
-#if DEBUG > 1
- wxDebugMsg("wxMDIChildFrame::OnSize %d: invalid, so returning.\n", GetHWND());
-#endif
return;
}
if (!m_iconized)
{
// forward WM_SIZE to status bar control
-#if USE_NATIVE_STATUSBAR
+#if wxUSE_NATIVE_STATUSBAR
if (m_frameStatusBar && m_frameStatusBar->IsKindOf(CLASSINFO(wxStatusBar95)))
{
wxSizeEvent event(wxSize(x, y), m_frameStatusBar->GetId());
#endif
PositionStatusBar();
+ PositionToolBar();
wxWindow::MSWOnSize(x, y, id);
}
bool wxMDIChildFrame::MSWOnCommand(WXWORD id, WXWORD cmd, WXHWND control)
{
-#if DEBUG > 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;
}
{
wxMDIParentFrame *parent = (wxMDIParentFrame *)GetParent();
HMENU parent_menu = (HMENU) parent->GetWinMenu();
-#if DEBUG > 1
- wxDebugMsg("Parent menu is %d\n", parent_menu);
-#endif
HMENU child_menu = (HMENU) GetWinMenu();
-#if DEBUG > 1
- wxDebugMsg("Child menu is %d\n", child_menu);
-#endif
if (activate)
{
{
parent->m_parentFrameActive = FALSE;
HMENU subMenu = GetSubMenu((HMENU) parent->GetWindowMenu(), 0);
-#if DEBUG > 1
- wxDebugMsg("Window submenu is %d\n", subMenu);
-#endif
-// HMENU subMenu = 0;
#ifdef __WIN32__
::SendMessage((HWND) parent->GetClientWindow()->GetHWND(), WM_MDISETMENU,
(WPARAM)child_menu,
{
parent->m_parentFrameActive = TRUE;
HMENU subMenu = GetSubMenu((HMENU) parent->GetWindowMenu(), 0);
-#if DEBUG > 1
- wxDebugMsg("Window submenu is %d\n", subMenu);
-#endif
-// HMENU subMenu = 0;
#ifdef __WIN32__
::SendMessage((HWND) parent->GetClientWindow()->GetHWND(), WM_MDISETMENU,
(WPARAM)parent_menu,
wxActivateEvent event(wxEVT_ACTIVATE, flag, m_windowId);
event.SetEventObject( this );
GetEventHandler()->ProcessEvent(event);
-
-#if DEBUG > 1
- wxDebugMsg("Finished (de)activating\n");
-#endif
return 0;
}
// destroyed.
HWND oldHandle = (HWND)GetHWND();
-#if DEBUG > 1
- wxDebugMsg("*** About to DestroyWindow MDI child %d\n", oldHandle);
-#endif
#ifdef __WIN32__
SendMessage((HWND) parent->GetClientWindow()->GetHWND(), WM_MDIDESTROY, (WPARAM)oldHandle, (LPARAM)0);
#else
SendMessage((HWND) parent->GetClientWindow()->GetHWND(), WM_MDIDESTROY, (HWND)oldHandle, 0);
-#endif
-#if DEBUG > 1
- wxDebugMsg("*** Finished DestroyWindow MDI child %d\n", oldHandle);
#endif
invalidHandle = 0;
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(CASTWNDPROC MSWGetOldWndProc(), (HWND) GetHWND(), (UINT) nMsg, (WPARAM) wParam, (LPARAM) lParam);
else
return ::DefWindowProc((HWND) m_hWnd, (UINT) nMsg, (WPARAM) wParam, (LPARAM) lParam);
}