X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dfb06c62ffda093aecdf8ab0f9e405a2f3dfb332..f809133f9eb30d4746c71098bbc14c621b94ef0d:/src/msw/toplevel.cpp diff --git a/src/msw/toplevel.cpp b/src/msw/toplevel.cpp index 6530437b94..83bebdb7f1 100644 --- a/src/msw/toplevel.cpp +++ b/src/msw/toplevel.cpp @@ -101,20 +101,24 @@ void wxTopLevelWindowMSW::Init() m_fsIsShowing = FALSE; } -long wxTopLevelWindowMSW::MSWGetCreateWindowFlags(long *exflags) const +WXDWORD wxTopLevelWindowMSW::MSWGetStyle(long style, WXDWORD *exflags) const { - long style = GetWindowStyle(); + // let the base class deal with the common styles but fix the ones which + // don't make sense for us (we also deal with the borders ourselves) + WXDWORD msflags = wxWindow::MSWGetStyle + ( + (style & ~wxBORDER_MASK) | wxBORDER_NONE, exflags + ) & ~WS_CHILD; // first select the kind of window being created // // note that if we don't set WS_POPUP, Windows assumes WS_OVERLAPPED and // creates a window with both caption and border, hence we also test it // below in some other cases - long msflags; if ( style & wxFRAME_TOOL_WINDOW ) - msflags = WS_POPUP; + msflags |= WS_POPUP; else - msflags = WS_OVERLAPPED; + msflags |= WS_OVERLAPPED; // border and caption styles if ( style & wxRESIZE_BORDER ) @@ -141,9 +145,6 @@ long wxTopLevelWindowMSW::MSWGetCreateWindowFlags(long *exflags) const if ( style & wxMAXIMIZE ) msflags |= WS_MAXIMIZE; - if ( style & wxCLIP_CHILDREN ) - msflags |= WS_CLIPCHILDREN; - // Keep this here because it saves recoding this function in wxTinyFrame #if wxUSE_ITSY_BITSY && !defined(__WIN32__) if ( style & wxTINY_CAPTION_VERT ) @@ -157,8 +158,6 @@ long wxTopLevelWindowMSW::MSWGetCreateWindowFlags(long *exflags) const if ( exflags ) { - *exflags = MakeExtendedStyle(style); - #if !defined(__WIN16__) && !defined(__SC__) if ( !(GetExtraStyle() & wxTOPLEVEL_EX_DIALOG) ) { @@ -177,7 +176,7 @@ long wxTopLevelWindowMSW::MSWGetCreateWindowFlags(long *exflags) const *exflags |= WS_EX_TOPMOST; #ifdef __WIN32__ - if ( m_exStyle & wxFRAME_EX_CONTEXTHELP ) + if ( GetExtraStyle() & wxFRAME_EX_CONTEXTHELP ) *exflags |= WS_EX_CONTEXTHELP; #endif // __WIN32__ } @@ -185,7 +184,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,21 +217,21 @@ 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; } - long exflags; + WXDWORD exflags; (void)MSWGetCreateWindowFlags(&exflags); if ( exflags ) @@ -315,8 +314,8 @@ bool wxTopLevelWindowMSW::CreateFrame(const wxString& title, const wxPoint& pos, const wxSize& size) { - long exflags; - long flags = MSWGetCreateWindowFlags(&exflags); + WXDWORD exflags; + WXDWORD flags = MSWGetCreateWindowFlags(&exflags); return MSWCreate(wxCanvasClassName, title, pos, size, flags, exflags); } @@ -358,15 +357,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 {