X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3304646d0657d889ad676485a4b635e2032b0038..bf6d45ebf663a0f31021893d2369a95d96198c8f:/src/msw/mdi.cpp diff --git a/src/msw/mdi.cpp b/src/msw/mdi.cpp index 399c30e7a4..7114765e93 100644 --- a/src/msw/mdi.cpp +++ b/src/msw/mdi.cpp @@ -199,7 +199,7 @@ bool wxMDIParentFrame::Create(wxWindow *parent, msflags &= ~WS_HSCROLL; if ( !wxWindow::MSWCreate(wxMDIFrameClassName, - title, + title.wx_str(), pos, size, msflags, exflags) ) @@ -315,6 +315,17 @@ void wxMDIParentFrame::DoMenuUpdates(wxMenu* menu) } } +const wxMenuItem *wxMDIParentFrame::FindItemInMenuBar(int menuId) const +{ + const wxMenuItem *item = wxFrame::FindItemInMenuBar(menuId); + if ( !item && m_currentChild ) + { + item = m_currentChild->FindItemInMenuBar(menuId); + } + + return item; +} + void wxMDIParentFrame::UpdateClientSize() { if ( GetClientWindow() ) @@ -475,24 +486,6 @@ WXLRESULT wxMDIParentFrame::MSWWindowProc(WXUINT message, rc = true; break; - case WM_MENUSELECT: - { - WXWORD item, flags; - WXHMENU hmenu; - UnpackMenuSelect(wParam, lParam, &item, &flags, &hmenu); - - if ( m_parentFrameActive ) - { - processed = HandleMenuSelect(item, flags, hmenu); - } - else if (m_currentChild) - { - processed = m_currentChild-> - HandleMenuSelect(item, flags, hmenu); - } - } - break; - case WM_SIZE: // though we don't (usually) resize the MDI client to exactly fit the // client area we need to pass this one to DefFrameProc to allow the children to show @@ -718,7 +711,7 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent, mcs.szClass = style & wxFULL_REPAINT_ON_RESIZE ? wxMDIChildFrameClassName : wxMDIChildFrameClassNameNoRedraw; - mcs.szTitle = title; + mcs.szTitle = title.wx_str(); mcs.hOwner = wxGetInstance(); if (x != wxDefaultCoord) mcs.x = x; @@ -778,6 +771,10 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent, wxMDIChildFrame::~wxMDIChildFrame() { + // if we hadn't been created, there is nothing to destroy + if ( !m_hWnd ) + return; + // will be destroyed by DestroyChildren() but reset them before calling it // to avoid using dangling pointers if a callback comes in the meanwhile #if wxUSE_TOOLBAR @@ -859,6 +856,21 @@ void wxMDIChildFrame::DoSetClientSize(int width, int height) GetEventHandler()->ProcessEvent(event); } +// Unlike other wxTopLevelWindowBase, the mdi child's "GetPosition" is not the +// same as its GetScreenPosition +void wxMDIChildFrame::DoGetScreenPosition(int *x, int *y) const +{ + HWND hWnd = GetHwnd(); + + RECT rect; + ::GetWindowRect(hWnd, &rect); + if (x) + *x = rect.left; + if (y) + *y = rect.top; +} + + void wxMDIChildFrame::DoGetPosition(int *x, int *y) const { RECT rect; @@ -1376,7 +1388,11 @@ static void MDISetMenu(wxWindow *win, HMENU hmenuFrame, HMENU hmenuWindow) (WPARAM)hmenuFrame, (LPARAM)hmenuWindow) ) { - wxLogLastError(_T("SendMessage(WM_MDISETMENU)")); +#ifdef __WXDEBUG__ + DWORD err = ::GetLastError(); + if ( err ) + wxLogApiError(_T("SendMessage(WM_MDISETMENU)"), err); +#endif // __WXDEBUG__ } } @@ -1414,14 +1430,14 @@ static void InsertWindowMenu(wxWindow *win, WXHMENU menu, HMENU subMenu) { success = true; ::InsertMenu(hmenu, i, MF_BYPOSITION | MF_POPUP | MF_STRING, - (UINT)subMenu, _("&Window")); + (UINT)subMenu, _("&Window").wx_str()); break; } } if ( !success ) { - ::AppendMenu(hmenu, MF_POPUP, (UINT)subMenu, _("&Window")); + ::AppendMenu(hmenu, MF_POPUP, (UINT)subMenu, _("&Window").wx_str()); } }