X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3a12b404f849a8ce2d28290899379a1f934a9af1..8e673075f60485f90093c842a2fe9f2ad0feaf65:/src/msw/frame.cpp diff --git a/src/msw/frame.cpp b/src/msw/frame.cpp index 2a738679e0..c67dd43753 100644 --- a/src/msw/frame.cpp +++ b/src/msw/frame.cpp @@ -80,8 +80,9 @@ BEGIN_EVENT_TABLE(wxFrameMSW, wxFrameBase) EVT_SYS_COLOUR_CHANGED(wxFrameMSW::OnSysColourChanged) END_EVENT_TABLE() -IMPLEMENT_DYNAMIC_CLASS(wxFrameMSW, wxWindow) -IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxFrameMSW) +#ifndef __WXUNIVERSAL__ + IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxWindow) +#endif // ============================================================================ // implementation @@ -138,15 +139,6 @@ bool wxFrameMSW::Create(wxWindow *parent, { SetName(name); m_windowStyle = style; -#if wxUSE_MENUS - m_frameMenuBar = NULL; -#endif // wxUSE_MENUS -#if wxUSE_TOOLBAR - m_frameToolBar = NULL; -#endif // wxUSE_TOOLBAR -#if wxUSE_STATUSBAR - m_frameStatusBar = NULL; -#endif // wxUSE_STATUSBAR SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE)); @@ -166,7 +158,10 @@ bool wxFrameMSW::Create(wxWindow *parent, wxTopLevelWindows.Append(this); - MSWCreate(m_windowId, parent, wxFrameClassName, this, title, + // the frame must have NULL parent HWND or it would be always on top of its + // parent which is not what we usually want (in fact, we only want it for + // frames with the special wxFRAME_TOOL_WINDOW style handled elsewhere) + MSWCreate(m_windowId, NULL, wxFrameClassName, this, title, x, y, width, height, style); wxModelessWindows.Append(this); @@ -380,21 +375,31 @@ void wxFrameMSW::Restore() bool wxFrameMSW::IsIconized() const { +#ifdef __WXMICROWIN__ + // TODO + return FALSE; +#else ((wxFrameMSW *)this)->m_iconized = (::IsIconic(GetHwnd()) != 0); return m_iconized; +#endif } // Is it maximized? bool wxFrameMSW::IsMaximized() const { +#ifdef __WXMICROWIN__ + // TODO + return FALSE; +#else return (::IsZoomed(GetHwnd()) != 0); +#endif } void wxFrameMSW::SetIcon(const wxIcon& icon) { wxFrameBase::SetIcon(icon); -#if defined(__WIN95__) +#if defined(__WIN95__) && !defined(__WXMICROWIN__) if ( m_icon.Ok() ) { SendMessage(GetHwnd(), WM_SETICON, @@ -475,24 +480,12 @@ void wxFrameMSW::PositionStatusBar() } #endif // wxUSE_STATUSBAR -void wxFrameMSW::DetachMenuBar() -{ -#if wxUSE_MENUS - if ( m_frameMenuBar ) - { - m_frameMenuBar->Detach(); - m_frameMenuBar = NULL; - } -#endif // wxUSE_MENUS -} +#if wxUSE_MENUS_NATIVE -void wxFrameMSW::SetMenuBar(wxMenuBar *menubar) +void wxFrameMSW::AttachMenuBar(wxMenuBar *menubar) { -#if wxUSE_MENUS - // detach the old menu bar in any case - DetachMenuBar(); + wxFrameBase::AttachMenuBar(menubar); -#if wxUSE_MENUS_NATIVE if ( !menubar ) { // actually remove the menu from the frame @@ -506,37 +499,29 @@ void wxFrameMSW::SetMenuBar(wxMenuBar *menubar) { m_hMenu = menubar->GetHMenu(); } - else + else // no HMENU yet { - if (menubar->IsAttached()) - menubar->Detach(); - m_hMenu = menubar->Create(); if ( !m_hMenu ) + { + wxFAIL_MSG( _T("failed to create menu bar") ); return; + } } InternalSetMenuBar(); } -#endif // wxUSE_MENUS_NATIVE - - if ( menubar ) - { - m_frameMenuBar = menubar; - menubar->Attach((wxFrame *)this); - } -#endif // wxUSE_MENUS } -#if wxUSE_MENUS_NATIVE - void wxFrameMSW::InternalSetMenuBar() { +#ifndef __WXMICROWIN__ if ( !::SetMenu(GetHwnd(), (HMENU)m_hMenu) ) { wxLogLastError(wxT("SetMenu")); } +#endif } #endif // wxUSE_MENUS_NATIVE @@ -585,8 +570,10 @@ bool wxFrameMSW::ShowFullScreen(bool show, long style) } #endif // wxUSE_TOOLBAR +#ifndef __WXMICROWIN__ if (style & wxFULLSCREEN_NOMENUBAR) SetMenu((HWND)GetHWND(), (HMENU) NULL); +#endif #if wxUSE_STATUSBAR wxStatusBar *theStatusBar = GetStatusBar(); @@ -676,8 +663,10 @@ bool wxFrameMSW::ShowFullScreen(bool show, long style) } #endif // wxUSE_STATUSBAR +#ifndef __WXMICROWIN__ if ((m_fsStyle & wxFULLSCREEN_NOMENUBAR) && (m_hMenu != 0)) SetMenu((HWND)GetHWND(), (HMENU)m_hMenu); +#endif Maximize(m_fsIsMaximized); SetWindowLong((HWND)GetHWND(),GWL_STYLE, m_fsOldWindowStyle); @@ -909,7 +898,7 @@ void wxFrameMSW::IconizeChildFrames(bool bIconize) // the child MDI frames are a special case and should not be touched by // the parent frame - instead, they are managed by the user - wxFrameMSW *frame = wxDynamicCast(win, wxFrameMSW); + wxFrameMSW *frame = wxDynamicCast(win, wxFrame); if ( frame #if wxUSE_MDI_ARCHITECTURE && !wxDynamicCast(frame, wxMDIChildFrame) @@ -956,6 +945,7 @@ bool wxFrameMSW::HandlePaint() RECT rect; if ( GetUpdateRect(GetHwnd(), &rect, FALSE) ) { +#ifndef __WXMICROWIN__ if ( m_iconized ) { HICON hIcon = m_icon.Ok() ? GetHiconOf(m_icon) @@ -989,6 +979,7 @@ bool wxFrameMSW::HandlePaint() return TRUE; } else + #endif { return wxWindow::HandlePaint(); } @@ -1003,6 +994,7 @@ bool wxFrameMSW::HandlePaint() bool wxFrameMSW::HandleSize(int x, int y, WXUINT id) { bool processed = FALSE; +#ifndef __WXMICROWIN__ switch ( id ) { @@ -1033,6 +1025,7 @@ bool wxFrameMSW::HandleSize(int x, int y, WXUINT id) m_iconized = TRUE; break; } +#endif if ( !m_iconized ) { @@ -1092,10 +1085,12 @@ bool wxFrameMSW::HandleMenuSelect(WXWORD nItem, WXWORD flags, WXHMENU hMenu) // menu was removed from screen item = -1; } +#ifndef __WXMICROWIN__ else if ( !(flags & MF_POPUP) && !(flags & MF_SEPARATOR) ) { item = nItem; } +#endif else { #if wxUSE_STATUSBAR @@ -1147,6 +1142,7 @@ long wxFrameMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) } break; +#ifndef __WXMICROWIN__ case WM_MENUSELECT: { WXWORD item, flags; @@ -1156,11 +1152,13 @@ long wxFrameMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) processed = HandleMenuSelect(item, flags, hmenu); } break; +#endif case WM_PAINT: processed = HandlePaint(); break; +#ifndef __WXMICROWIN__ case WM_QUERYDRAGICON: { HICON hIcon = m_icon.Ok() ? GetHiconOf(m_icon) @@ -1169,6 +1167,7 @@ long wxFrameMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) processed = rc != 0; } break; +#endif case WM_SIZE: processed = HandleSize(LOWORD(lParam), HIWORD(lParam), wParam);