X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3d8dea7e2e10502846e18189a8d894e27effdb23..dd107c50be43e8d4dbdba20df162faf119a3781c:/src/msw/mdi.cpp diff --git a/src/msw/mdi.cpp b/src/msw/mdi.cpp index 2aa8a208f7..b0ede88e4e 100644 --- a/src/msw/mdi.cpp +++ b/src/msw/mdi.cpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: mdi.cpp -// Purpose: MDI classes +// Name: src/msw/mdi.cpp +// Purpose: MDI classes for wxMSW // Author: Julian Smart // Modified by: // Created: 04/01/98 @@ -180,12 +180,12 @@ bool wxMDIParentFrame::Create(wxWindow *parent, { m_windowMenu = new wxMenu; - m_windowMenu->Append(IDM_WINDOWCASCADE, wxT("&Cascade")); - m_windowMenu->Append(IDM_WINDOWTILEHOR, wxT("Tile &Horizontally")); - m_windowMenu->Append(IDM_WINDOWTILEVERT, wxT("Tile &Vertically")); + m_windowMenu->Append(IDM_WINDOWCASCADE, _("&Cascade")); + m_windowMenu->Append(IDM_WINDOWTILEHOR, _("Tile &Horizontally")); + m_windowMenu->Append(IDM_WINDOWTILEVERT, _("Tile &Vertically")); m_windowMenu->AppendSeparator(); - m_windowMenu->Append(IDM_WINDOWICONS, wxT("&Arrange Icons")); - m_windowMenu->Append(IDM_WINDOWNEXT, wxT("&Next")); + m_windowMenu->Append(IDM_WINDOWICONS, _("&Arrange Icons")); + m_windowMenu->Append(IDM_WINDOWNEXT, _("&Next")); } m_parentFrameActive = TRUE; @@ -300,11 +300,14 @@ void wxMDIParentFrame::SetWindowMenu(wxMenu* menu) { m_windowMenu = menu; if (GetMenuBar()) - InsertWindowMenu(GetClientWindow(), m_hMenu, (HMENU) m_windowMenu->GetHMenu()); + { + InsertWindowMenu(GetClientWindow(), m_hMenu, + GetHmenuOf(m_windowMenu)); + } } } -void wxMDIParentFrame::OnSize(wxSizeEvent& event) +void wxMDIParentFrame::OnSize(wxSizeEvent&) { if ( GetClientWindow() ) { @@ -692,7 +695,7 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent, else mcs.cy = CW_USEDEFAULT; - DWORD msflags = WS_OVERLAPPED | WS_CLIPCHILDREN; + DWORD msflags = WS_OVERLAPPED | WS_CLIPCHILDREN | WS_THICKFRAME; if (style & wxMINIMIZE_BOX) msflags |= WS_MINIMIZEBOX; if (style & wxMAXIMIZE_BOX) @@ -722,6 +725,7 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent, //SetWindowLong(GetHwnd(), 0, (long)this); wxModelessWindows.Append(this); + return TRUE; } @@ -999,6 +1003,8 @@ bool wxMDIChildFrame::HandleMDIActivate(long WXUNUSED(activate), wxActivateEvent event(wxEVT_ACTIVATE, activated, m_windowId); event.SetEventObject( this ); + ResetWindowStyle((void *)NULL); + return GetEventHandler()->ProcessEvent(event); } @@ -1088,25 +1094,31 @@ bool wxMDIChildFrame::ResetWindowStyle(void *vrect) wxMDIChildFrame* pChild = pFrameWnd->GetActiveChild(); if (!pChild || (pChild == this)) { - DWORD dwStyle = ::GetWindowLong(GetWinHwnd(pFrameWnd->GetClientWindow()), GWL_EXSTYLE); - DWORD dwThisStyle = ::GetWindowLong(GetHwnd(), GWL_STYLE); + HWND hwndClient = GetWinHwnd(pFrameWnd->GetClientWindow()); + DWORD dwStyle = ::GetWindowLong(hwndClient, GWL_EXSTYLE); + + // we want to test whether there is a maximized child, so just set + // dwThisStyle to 0 if there is no child at all + DWORD dwThisStyle = pChild + ? ::GetWindowLong(GetWinHwnd(pChild), GWL_STYLE) : 0; DWORD dwNewStyle = dwStyle; - if (pChild != NULL && (dwThisStyle & WS_MAXIMIZE)) + if ( dwThisStyle & WS_MAXIMIZE ) dwNewStyle &= ~(WS_EX_CLIENTEDGE); else dwNewStyle |= WS_EX_CLIENTEDGE; if (dwStyle != dwNewStyle) { - HWND hwnd = GetWinHwnd(pFrameWnd->GetClientWindow()); - ::RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE | RDW_ALLCHILDREN); - ::SetWindowLong(hwnd, GWL_EXSTYLE, dwNewStyle); - ::SetWindowPos(hwnd, NULL, 0, 0, 0, 0, + // force update of everything + ::RedrawWindow(hwndClient, NULL, NULL, + RDW_INVALIDATE | RDW_ALLCHILDREN); + ::SetWindowLong(hwndClient, GWL_EXSTYLE, dwNewStyle); + ::SetWindowPos(hwndClient, NULL, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOCOPYBITS); if (rect) - ::GetClientRect(hwnd, rect); + ::GetClientRect(hwndClient, rect); return TRUE; } @@ -1134,7 +1146,9 @@ bool wxMDIClientWindow::CreateClient(wxMDIParentFrame *parent, long style) ccs.hWindowMenu = (HMENU) parent->GetWindowMenu()->GetHMenu(); ccs.idFirstChild = wxFIRST_MDI_CHILD; - DWORD msStyle = WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN; + DWORD msStyle = MDIS_ALLCHILDSTYLES | WS_VISIBLE | WS_CHILD | + WS_CLIPCHILDREN | WS_CLIPSIBLINGS; + if ( style & wxHSCROLL ) msStyle |= WS_HSCROLL; if ( style & wxVSCROLL ) @@ -1254,6 +1268,10 @@ static void MDISetMenu(wxWindow *win, HMENU hmenuFrame, HMENU hmenuWindow) wxWindow *parent = win->GetParent(); wxCHECK_RET( parent, wxT("MDI client without parent frame? weird...") ); +#ifndef __WIN16__ + ::SendMessage(GetWinHwnd(win), WM_MDIREFRESHMENU, 0, 0L); +#endif + ::DrawMenuBar(GetWinHwnd(parent)); } @@ -1300,7 +1318,6 @@ static void RemoveWindowMenu(wxWindow *win, WXHMENU menu) // Try to insert Window menu in front of Help, otherwise append it. HMENU hmenu = (HMENU)menu; int N = GetMenuItemCount(hmenu); - bool success = FALSE; for ( int i = 0; i < N; i++ ) { wxChar buf[256]; @@ -1314,7 +1331,6 @@ static void RemoveWindowMenu(wxWindow *win, WXHMENU menu) if ( wxStripMenuCodes(wxString(buf)).IsSameAs(_("Window")) ) { - success = TRUE; ::RemoveMenu(hmenu, i, MF_BYPOSITION); break; }