]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/toplevel.cpp
Enabled wxPostscriptDC to be used in wxMSW, if wxUSE_POSTSCRIPT
[wxWidgets.git] / src / msw / toplevel.cpp
index 91d64f0d372217655854322f15d4f1db42a17c3c..b5da266564757dffea826fadd076040bcfc11028 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;
@@ -192,6 +195,13 @@ bool wxTopLevelWindowMSW::CreateDialog(const wxChar *dlgTemplate,
     if ( !parent && !(GetWindowStyleFlag() & wxDIALOG_NO_PARENT) )
     {
         parent = wxTheApp->GetTopWindow();
+
+        // but don't use the window which is currently hidden as then the
+        // dialog would be hidden as well
+        if ( parent && !parent->IsShown() )
+        {
+            parent = NULL;
+        }
     }
 
     m_hWnd = (WXHWND)::CreateDialog(wxGetInstance(),
@@ -244,6 +254,27 @@ bool wxTopLevelWindowMSW::CreateDialog(const wxChar *dlgTemplate,
     int x, y, w, h;
     if ( MSWGetCreateWindowCoords(pos, size, x, y, w, h) )
     {
+        // we can't use CW_USEDEFAULT here as we're not calling CreateWindow()
+        // 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 )
+        {
+            // the exact number doesn't matter, the dialog will be resized
+            // again soon anyhow but it should be big enough to allow
+            // calculation relying on "totalSize - clientSize > 0" work, i.e.
+            // at least greater than the title bar height
+            w =
+            h = 100;
+        }
+
+        if ( x == CW_USEDEFAULT )
+        {
+            // well, where should we put it? maybe centre it on screen?
+            x =
+            y = 0;
+        }
+
         if ( !::MoveWindow(GetHwnd(), x, y, w, h, FALSE) )
         {
             wxLogLastError(wxT("MoveWindow"));