]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/frame.cpp
fixed yet another bug in wxRegConfig::SetPath() - SetPath(../..) didn't work
[wxWidgets.git] / src / msw / frame.cpp
index f7b9b64311e8b4dcee40007d971748919439d005..d766cb099255573a8539ea147b5cf48c5ff74d95 100644 (file)
@@ -64,7 +64,6 @@
 // ----------------------------------------------------------------------------
 
 extern wxWindowList wxModelessWindows;
-extern wxList WXDLLEXPORT wxPendingDelete;
 extern const wxChar *wxFrameClassName;
 
 #if wxUSE_MENUS_NATIVE
@@ -80,8 +79,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 +138,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 +157,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);
@@ -353,6 +347,16 @@ bool wxFrameMSW::Show(bool show)
     return TRUE;
 }
 
+void wxFrameMSW::Raise()
+{
+#ifdef __WIN16__
+    // no SetForegroundWindow() in Win16
+    wxFrameBase::Raise();
+#else // Win32
+    ::SetForegroundWindow(GetHwnd());
+#endif // Win16/32
+}
+
 void wxFrameMSW::Iconize(bool iconize)
 {
     DoShowWindow(iconize ? SW_MINIMIZE : SW_RESTORE);
@@ -485,24 +489,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
@@ -516,31 +508,21 @@ 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__
@@ -633,7 +615,7 @@ bool wxFrameMSW::ShowFullScreen(bool show, long style)
         LONG offFlags = 0;
 
         if (style & wxFULLSCREEN_NOBORDER)
-            offFlags |= WS_BORDER;
+            offFlags |= WS_BORDER | WS_THICKFRAME;
         if (style & wxFULLSCREEN_NOCAPTION)
             offFlags |= (WS_CAPTION | WS_SYSMENU);
 
@@ -925,7 +907,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)