X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fd85b0640ea48f66a27e5908930e9f004de698b6..67e49a98bbba6793cf1e344477bee9e46d4d5c71:/src/msw/mdi.cpp diff --git a/src/msw/mdi.cpp b/src/msw/mdi.cpp index b021145a27..5869306dda 100644 --- a/src/msw/mdi.cpp +++ b/src/msw/mdi.cpp @@ -270,19 +270,20 @@ wxMDIParentFrame::~wxMDIParentFrame() } } +#if wxUSE_MENUS_NATIVE + void wxMDIParentFrame::InternalSetMenuBar() { -// HMENU subMenu = GetSubMenu((HMENU) m_windowMenu, 0); - m_parentFrameActive = TRUE; - HMENU subMenu = (HMENU) 0; - if (GetWindowMenu()) - subMenu = (HMENU) GetWindowMenu()->GetHMenu(); + wxMenu *menu = GetWindowMenu(); + HMENU subMenu = menu ? GetHmenuOf(menu) : 0; InsertWindowMenu(GetClientWindow(), m_hMenu, subMenu); } +#endif // wxUSE_MENUS_NATIVE + void wxMDIParentFrame::SetWindowMenu(wxMenu* menu) { if (m_windowMenu) @@ -650,6 +651,7 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent, : wxDEFAULT_MDICHILDFRAME_ICON); SetName(name); + wxWindowBase::Show(TRUE); // MDI child frame starts off shown if ( id > -1 ) m_windowId = id; @@ -695,7 +697,7 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent, else mcs.cy = CW_USEDEFAULT; - DWORD msflags = WS_OVERLAPPED | WS_CLIPCHILDREN | WS_THICKFRAME; + DWORD msflags = WS_OVERLAPPED | WS_CLIPCHILDREN | WS_THICKFRAME | WS_VISIBLE ; if (style & wxMINIMIZE_BOX) msflags |= WS_MINIMIZEBOX; if (style & wxMAXIMIZE_BOX) @@ -872,10 +874,8 @@ long wxMDIChildFrame::MSWWindowProc(WXUINT message, break; case WM_GETMINMAXINFO: - // let the default window proc calculate the size of MDI children - // frames because it is based on the size of the MDI client window, - // not on the values specified in wxWindow m_min/max variables - return MSWDefWindowProc(message, wParam, lParam); + processed = HandleGetMinMaxInfo((MINMAXINFO *)lParam); + break; case WM_MDIACTIVATE: { @@ -978,7 +978,10 @@ bool wxMDIChildFrame::HandleMDIActivate(long WXUNUSED(activate), parent->m_currentChild = NULL; HMENU parent_menu = (HMENU)parent->GetWinMenu(); - if ( parent_menu ) + + // activate the the parent menu only when there is no other child + // that has been activated + if ( parent_menu && !hwndAct ) { parent->m_parentFrameActive = TRUE; @@ -1036,6 +1039,33 @@ bool wxMDIChildFrame::HandleWindowPosChanging(void *pos) return FALSE; } +bool wxMDIChildFrame::HandleGetMinMaxInfo(void *mmInfo) +{ + MINMAXINFO *info = (MINMAXINFO *)mmInfo; + + // let the default window proc calculate the size of MDI children + // frames because it is based on the size of the MDI client window, + // not on the values specified in wxWindow m_max variables + bool processed = MSWDefWindowProc(WM_GETMINMAXINFO, 0, (LPARAM)mmInfo) != 0; + + // but allow GetSizeHints() to set the min size + if ( m_minWidth != -1 ) + { + info->ptMinTrackSize.x = m_minWidth; + + processed = TRUE; + } + + if ( m_minHeight != -1 ) + { + info->ptMinTrackSize.y = m_minHeight; + + processed = TRUE; + } + + return TRUE; +} + // --------------------------------------------------------------------------- // MDI specific message translation/preprocessing // --------------------------------------------------------------------------- @@ -1146,12 +1176,7 @@ bool wxMDIClientWindow::CreateClient(wxMDIParentFrame *parent, long style) ccs.hWindowMenu = (HMENU) parent->GetWindowMenu()->GetHMenu(); ccs.idFirstChild = wxFIRST_MDI_CHILD; - // Note from JACS: please don't restore MDIS_ALLCHILDSTYLES - // without verifying that the OGL Studio sample works. Currently, - // it doesn't, with this style. We have to track it down, but - // I'd rather Studio (and maybe apps like it) didn't completely - // break. - DWORD msStyle = /* MDIS_ALLCHILDSTYLES | */ WS_VISIBLE | WS_CHILD | + DWORD msStyle = MDIS_ALLCHILDSTYLES | WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS; if ( style & wxHSCROLL )