]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/toplevel.cpp
Fixed toolbar crash for MinGW/Cygwin
[wxWidgets.git] / src / msw / toplevel.cpp
index 6530437b9454f039d50e61e4c85b1d7374d2e7b6..e77677c7d40645d6afe677aee0f383780a00a0a3 100644 (file)
@@ -185,7 +185,7 @@ long wxTopLevelWindowMSW::MSWGetCreateWindowFlags(long *exflags) const
     return msflags;
 }
 
-bool wxTopLevelWindowMSW::CreateDialog(const wxChar *dlgTemplate,
+bool wxTopLevelWindowMSW::CreateDialog(const void *dlgTemplate,
                                        const wxString& title,
                                        const wxPoint& pos,
                                        const wxSize& size)
@@ -218,16 +218,16 @@ bool wxTopLevelWindowMSW::CreateDialog(const wxChar *dlgTemplate,
         }
     }
 
-    m_hWnd = (WXHWND)::CreateDialog(wxGetInstance(),
-                                    dlgTemplate,
+    m_hWnd = (WXHWND)::CreateDialogIndirect(wxGetInstance(),
+                                    (DLGTEMPLATE*)dlgTemplate,
                                     parent ? GetHwndOf(parent) : NULL,
                                     (DLGPROC)wxDlgProc);
 
     if ( !m_hWnd )
     {
-        wxFAIL_MSG(_("Did you forget to include wx/msw/wx.rc in your resources?"));
+        wxFAIL_MSG(_("Failed to create dialog. Incorrect DLGTEMPLATE?"));
 
-        wxLogSysError(_("Can't create dialog using template '%s'"), dlgTemplate);
+        wxLogSysError(_("Can't create dialog using memory template"));
 
         return FALSE;
     }
@@ -358,15 +358,24 @@ bool wxTopLevelWindowMSW::Create(wxWindow *parent,
         // with & without captions under MSWindows, resizeable or not (but a
         // resizeable dialog always has caption - otherwise it would look too
         // strange)
-        const wxChar *dlgTemplate;
+        int dlgsize = sizeof(DLGTEMPLATE) + (sizeof(WORD) * 3);
+        DLGTEMPLATE* dlgTemplate = (DLGTEMPLATE*)malloc( dlgsize );
+        memset (dlgTemplate, 0, dlgsize );
+        dlgTemplate->x  = 34;
+        dlgTemplate->y  = 22;
+        dlgTemplate->cx = 144;
+        dlgTemplate->cy = 75;
+
         if ( style & wxRESIZE_BORDER )
-            dlgTemplate = wxT("wxResizeableDialog");
+          dlgTemplate->style = DS_MODALFRAME | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_THICKFRAME;
         else if ( style & wxCAPTION )
-            dlgTemplate = wxT("wxCaptionDialog");
+          dlgTemplate->style = DS_MODALFRAME | WS_CAPTION | WS_POPUP | WS_SYSMENU;
         else
-            dlgTemplate = wxT("wxNoCaptionDialog");
+          dlgTemplate->style = WS_POPUP;
 
-        return CreateDialog(dlgTemplate, title, pos, size);
+        bool ret = CreateDialog(dlgTemplate, title, pos, size);
+        free(dlgTemplate);
+        return ret;
     }
     else // !dialog
     {