]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/toplevel.cpp
blind fix for wxGIFDecoder::ReadGIF
[wxWidgets.git] / src / msw / toplevel.cpp
index 96cdd426005bb53c51a923de49a6131f4cbdbcb9..6c7b38718b045dfd99e91fbd67516772be35c4c3 100644 (file)
@@ -152,16 +152,19 @@ long wxTopLevelWindowMSW::MSWGetCreateWindowFlags(long *exflags) const
     {
         *exflags = MakeExtendedStyle(style);
 
-        // make all frames appear in the win9x shell taskbar unless
-        // wxFRAME_TOOL_WINDOW or wxFRAME_NO_TASKBAR is given - without giving
-        // them WS_EX_APPWINDOW style, the child (i.e. owned) frames wouldn't
-        // appear in it
 #if !defined(__WIN16__) && !defined(__SC__)
-        if ( (style & wxFRAME_TOOL_WINDOW) || (style & wxFRAME_NO_TASKBAR) )
-            *exflags |= WS_EX_TOOLWINDOW;
-        else if ( !(style & wxFRAME_NO_TASKBAR) )
-            *exflags |= WS_EX_APPWINDOW;
-#endif
+        if ( !(GetExtraStyle() & wxTOPLEVEL_EX_DIALOG) )
+        {
+            // make all frames appear in the win9x shell taskbar unless
+            // wxFRAME_TOOL_WINDOW or wxFRAME_NO_TASKBAR is given - without
+            // giving them WS_EX_APPWINDOW style, the child (i.e. owned) frames
+            // wouldn't appear in it
+            if ( (style & wxFRAME_TOOL_WINDOW) || (style & wxFRAME_NO_TASKBAR) )
+                *exflags |= WS_EX_TOOLWINDOW;
+            else if ( !(style & wxFRAME_NO_TASKBAR) )
+                *exflags |= WS_EX_APPWINDOW;
+        }
+#endif // !Win16
 
         if ( style & wxSTAY_ON_TOP )
             *exflags |= WS_EX_TOPMOST;
@@ -255,7 +258,7 @@ bool wxTopLevelWindowMSW::CreateDialog(const wxChar *dlgTemplate,
         // and passing CW_USEDEFAULT to MoveWindow() results in resizing the
         // window to (0, 0) size which breaks quite a lot of things, e.g. the
         // sizer calculation in wxSizer::Fit()
-        if ( w == CW_USEDEFAULT )
+        if ( w == (int)CW_USEDEFAULT )
         {
             // the exact number doesn't matter, the dialog will be resized
             // again soon anyhow but it should be big enough to allow
@@ -265,7 +268,7 @@ bool wxTopLevelWindowMSW::CreateDialog(const wxChar *dlgTemplate,
             h = 100;
         }
 
-        if ( x == CW_USEDEFAULT )
+        if ( x == (int)CW_USEDEFAULT )
         {
             // well, where should we put it? maybe centre it on screen?
             x =
@@ -598,3 +601,37 @@ void wxTopLevelWindowMSW::SetIcon(const wxIcon& icon)
     }
 #endif // __WIN95__
 }
+
+bool wxTopLevelWindowMSW::EnableCloseButton(bool enable)
+{
+#ifndef __WXMICROWIN__
+    // get system (a.k.a. window) menu
+    HMENU hmenu = ::GetSystemMenu(GetHwnd(), FALSE /* get it */);
+    if ( !hmenu )
+    {
+        wxLogLastError(_T("GetSystemMenu"));
+
+        return FALSE;
+    }
+
+    // enabling/disabling the close item from it also automatically
+    // disables/enables the close title bar button
+    if ( ::EnableMenuItem(hmenu, SC_CLOSE,
+                          MF_BYCOMMAND |
+                          (enable ? MF_ENABLED : MF_GRAYED)) == -1 )
+    {
+        wxLogLastError(_T("EnableMenuItem(SC_CLOSE)"));
+
+        return FALSE;
+    }
+
+    // update appearance immediately
+    if ( !::DrawMenuBar(GetHwnd()) )
+    {
+        wxLogLastError(_T("DrawMenuBar"));
+    }
+#endif // !__WXMICROWIN__
+
+    return TRUE;
+}
+