X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0caac3b4a99284985f3b47dc4942fa77cf9b4f43..5c250a10332dc17263c66deb629b5fa8c4320f8a:/src/msw/mdi.cpp diff --git a/src/msw/mdi.cpp b/src/msw/mdi.cpp index d2df50dda8..edb246d750 100644 --- a/src/msw/mdi.cpp +++ b/src/msw/mdi.cpp @@ -17,7 +17,7 @@ // headers // --------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "mdi.h" #endif @@ -28,6 +28,8 @@ #pragma hdrstop #endif +#if wxUSE_MDI_ARCHITECTURE && !defined(__WXUNIVERSAL__) + #ifndef WX_PRECOMP #include "wx/setup.h" #include "wx/frame.h" @@ -43,8 +45,6 @@ #include "wx/log.h" #endif -#if wxUSE_MDI_ARCHITECTURE && !defined(__WXUNIVERSAL__) - #include "wx/mdi.h" #include "wx/msw/private.h" @@ -68,11 +68,7 @@ extern wxMenu *wxCurrentPopupMenu; extern const wxChar *wxMDIFrameClassName; // from app.cpp extern const wxChar *wxMDIChildFrameClassName; extern const wxChar *wxMDIChildFrameClassNameNoRedraw; -#ifdef __DIGITALMARS__ -extern "C" void wxAssociateWinWithHandle(HWND hWnd, wxWindow *win); -#else extern void wxAssociateWinWithHandle(HWND hWnd, wxWindow *win); -#endif extern void wxRemoveHandleAssociation(wxWindow *win); static HWND invalidHandle = 0; @@ -215,6 +211,8 @@ bool wxMDIParentFrame::Create(wxWindow *parent, WXDWORD exflags; WXDWORD msflags = MSWGetCreateWindowFlags(&exflags); + msflags &= ~WS_VSCROLL; + msflags &= ~WS_HSCROLL; if ( !wxWindow::MSWCreate(wxMDIFrameClassName, title, @@ -235,12 +233,12 @@ bool wxMDIParentFrame::Create(wxWindow *parent, wxMDIParentFrame::~wxMDIParentFrame() { - DestroyChildren(); - - // already delete by DestroyChildren() + // see comment in ~wxMDIChildFrame m_frameToolBar = NULL; m_frameStatusBar = NULL; + DestroyChildren(); + if (m_windowMenu) { delete m_windowMenu; @@ -344,8 +342,8 @@ void wxMDIParentFrame::OnSysColourChanged(wxSysColourChangedEvent& event) WXHICON wxMDIParentFrame::GetDefaultIcon() const { - return (WXHICON)(wxSTD_MDIPARENTFRAME_ICON ? wxSTD_MDIPARENTFRAME_ICON - : wxDEFAULT_MDIPARENTFRAME_ICON); + // we don't have any standard icons (any more) + return (WXHICON)0; } // --------------------------------------------------------------------------- @@ -410,13 +408,13 @@ long wxMDIParentFrame::MSWWindowProc(WXUINT message, (void)HandleCommand(id, cmd, hwnd); // even if the frame didn't process it, there is no need to try it - // once again (i.e. call wxFrame::HandleCommand()) - we just dud it, + // once again (i.e. call wxFrame::HandleCommand()) - we just did it, // so pretend we processed the message anyhow processed = true; } // always pass this message DefFrameProc(), otherwise MDI menu - // commands (and sys commands - more surprizingly!) won't work + // commands (and sys commands - more surprisingly!) won't work MSWDefWindowProc(message, wParam, lParam); break; @@ -560,7 +558,7 @@ bool wxMDIParentFrame::HandleCommand(WXWORD id, WXWORD cmd, WXHWND hwnd) if ( IsMdiCommandId(id) ) { - wxWindowList::Node *node = GetChildren().GetFirst(); + wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); while ( node ) { wxWindow *child = node->GetData(); @@ -673,9 +671,9 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent, MDICREATESTRUCT mcs; - mcs.szClass = style & wxNO_FULL_REPAINT_ON_RESIZE - ? wxMDIChildFrameClassNameNoRedraw - : wxMDIChildFrameClassName; + mcs.szClass = style & wxFULL_REPAINT_ON_RESIZE + ? wxMDIChildFrameClassName + : wxMDIChildFrameClassNameNoRedraw; mcs.szTitle = title; mcs.hOwner = wxGetInstance(); if (x > -1) @@ -698,7 +696,7 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent, else mcs.cy = CW_USEDEFAULT; - DWORD msflags = WS_OVERLAPPED | WS_CLIPCHILDREN | WS_THICKFRAME | WS_VISIBLE ; + DWORD msflags = WS_OVERLAPPED | WS_CLIPCHILDREN | WS_VISIBLE ; if (style & wxMINIMIZE_BOX) msflags |= WS_MINIMIZEBOX; if (style & wxMAXIMIZE_BOX) @@ -732,12 +730,13 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent, wxMDIChildFrame::~wxMDIChildFrame() { - DestroyChildren(); - - // already deleted by DestroyChildren() + // will be destroyed by DestroyChildren() but reset them before calling it + // to avoid using dangling pointers if a callback comes in the meanwhile m_frameToolBar = NULL; m_frameStatusBar = NULL; + DestroyChildren(); + RemoveWindowMenu(NULL, m_hMenu); MSWDestroyWindow(); @@ -813,8 +812,8 @@ void wxMDIChildFrame::InternalSetMenuBar() WXHICON wxMDIChildFrame::GetDefaultIcon() const { - return (WXHICON)(wxSTD_MDICHILDFRAME_ICON ? wxSTD_MDICHILDFRAME_ICON - : wxDEFAULT_MDICHILDFRAME_ICON); + // we don't have any standard icons (any more) + return (WXHICON)0; } // --------------------------------------------------------------------------- @@ -1066,7 +1065,7 @@ bool wxMDIChildFrame::HandleGetMinMaxInfo(void *mmInfo) processed = true; } - return true; + return processed; } // --------------------------------------------------------------------------- @@ -1248,7 +1247,7 @@ void wxMDIClientWindow::DoSetSize(int x, int y, int width, int height, int sizeF { if (GetParent()) { - wxWindowList::Node *node = GetParent()->GetChildren().GetFirst(); + wxWindowList::compatibility_iterator node = GetParent()->GetChildren().GetFirst(); while (node) { wxWindow *child = node->GetData();