X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/31f658e4771f5c6c0176de169cfd2b8542ab631d..95dc6a2b1d14c2ddb121cdff52a6b013293ae4f1:/src/msw/mdi.cpp diff --git a/src/msw/mdi.cpp b/src/msw/mdi.cpp index 5a3fcf83af..44718647dc 100644 --- a/src/msw/mdi.cpp +++ b/src/msw/mdi.cpp @@ -45,6 +45,7 @@ #include "wx/log.h" #endif +#include "wx/stockitem.h" #include "wx/mdi.h" #include "wx/msw/private.h" @@ -76,7 +77,6 @@ static HWND invalidHandle = 0; // constants // --------------------------------------------------------------------------- -static const int IDM_WINDOWTILE = 4001; static const int IDM_WINDOWTILEHOR = 4001; static const int IDM_WINDOWCASCADE = 4002; static const int IDM_WINDOWICONS = 4003; @@ -88,10 +88,6 @@ static const int IDM_WINDOWPREV = 4006; static const int wxFIRST_MDI_CHILD = 4100; static const int wxLAST_MDI_CHILD = 4600; -// Status border dimensions -static const int wxTHICK_LINE_BORDER = 3; -static const int wxTHICK_LINE_WIDTH = 1; - // --------------------------------------------------------------------------- // private functions // --------------------------------------------------------------------------- @@ -138,6 +134,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxMDIClientWindow, wxWindow) BEGIN_EVENT_TABLE(wxMDIParentFrame, wxFrame) EVT_SIZE(wxMDIParentFrame::OnSize) + EVT_ICONIZE(wxMDIParentFrame::OnIconized) EVT_SYS_COLOUR_CHANGED(wxMDIParentFrame::OnSysColourChanged) END_EVENT_TABLE() @@ -318,7 +315,7 @@ void wxMDIParentFrame::DoMenuUpdates(wxMenu* menu) { int nCount = bar->GetMenuCount(); for (int n = 0; n < nCount; n++) - bar->GetMenu(n)->UpdateUI(source); + bar->GetMenu(n)->UpdateUI(source); } } } @@ -328,7 +325,7 @@ void wxMDIParentFrame::DoMenuUpdates(wxMenu* menu) } } -void wxMDIParentFrame::OnSize(wxSizeEvent&) +void wxMDIParentFrame::UpdateClientSize() { if ( GetClientWindow() ) { @@ -339,6 +336,23 @@ void wxMDIParentFrame::OnSize(wxSizeEvent&) } } +void wxMDIParentFrame::OnSize(wxSizeEvent& WXUNUSED(event)) +{ + UpdateClientSize(); + + // do not call event.Skip() here, it somehow messes up MDI client window +} + +void wxMDIParentFrame::OnIconized(wxIconizeEvent& event) +{ + event.Skip(); + + if ( !event.Iconized() ) + { + UpdateClientSize(); + } +} + // Returns the active MDI child window wxMDIChildFrame *wxMDIParentFrame::GetActiveChild() const { @@ -839,8 +853,10 @@ void wxMDIChildFrame::DoGetPosition(int *x, int *y) const wxMDIParentFrame *mdiParent = (wxMDIParentFrame *)GetParent(); ::ScreenToClient((HWND) mdiParent->GetClientWindow()->GetHWND(), &point); - *x = point.x; - *y = point.y; + if (x) + *x = point.x; + if (y) + *y = point.y; } void wxMDIChildFrame::InternalSetMenuBar() @@ -853,6 +869,12 @@ void wxMDIChildFrame::InternalSetMenuBar() parent->m_parentFrameActive = false; } +void wxMDIChildFrame::DetachMenuBar() +{ + RemoveWindowMenu(NULL, m_hMenu); + wxFrame::DetachMenuBar(); +} + WXHICON wxMDIChildFrame::GetDefaultIcon() const { // we don't have any standard icons (any more) @@ -1282,11 +1304,11 @@ void wxMDIClientWindow::DoSetSize(int x, int y, int width, int height, int sizeF // (see OGL studio sample). So check if the position is changed and if so, // redraw the MDI child frames. - wxPoint oldPos = GetPosition(); + const wxPoint oldPos = GetPosition(); - wxWindow::DoSetSize(x, y, width, height, sizeFlags); + wxWindow::DoSetSize(x, y, width, height, sizeFlags | wxSIZE_FORCE); - wxPoint newPos = GetPosition(); + const wxPoint newPos = GetPosition(); if ((newPos.x != oldPos.x) || (newPos.y != oldPos.y)) { @@ -1380,7 +1402,8 @@ static void InsertWindowMenu(wxWindow *win, WXHMENU menu, HMENU subMenu) continue; } - if ( wxStripMenuCodes(wxString(buf)).IsSameAs(_("Help")) ) + wxString strBuf(buf); + if ( wxStripMenuCodes(strBuf) == wxGetStockLabel(wxID_HELP,false) ) { success = true; ::InsertMenu(hmenu, i, MF_BYPOSITION | MF_POPUP | MF_STRING,