X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/42e69d6b435a4dd5415caf3750db62cf45b6f373..4cb122de97b40f0b6c8896f40847a7aaf762abb5:/src/msw/control.cpp?ds=sidebyside diff --git a/src/msw/control.cpp b/src/msw/control.cpp index 6788e0ceb7..3ae9f711d2 100644 --- a/src/msw/control.cpp +++ b/src/msw/control.cpp @@ -30,7 +30,7 @@ #include "wx/msw/private.h" -#if (defined(__WIN95__) && !defined(__GNUWIN32__)) || defined(__TWIN32__) +#if (defined(__WIN95__) && !defined(__GNUWIN32__)) || defined(__TWIN32__) || defined(wxUSE_NORLANDER_HEADERS) #include #endif @@ -56,15 +56,44 @@ wxControl::wxControl() wxControl::~wxControl() { m_isBeingDeleted = TRUE; +} - // If we delete an item, we should initialize the parent panel, - // because it could now be invalid. - wxWindow *parent = (wxWindow *)GetParent(); - if (parent) +bool wxControl::MSWCreateControl(const wxChar *classname, WXDWORD style) +{ + m_hWnd = (WXHWND)::CreateWindowEx + ( + GetExStyle(style), // extended style + classname, // the kind of control to create + NULL, // the window name + style, // the window style + 0, 0, 0, 0, // the window position and size + GetHwndOf(GetParent()), // parent + (HMENU)GetId(), // child id + wxGetInstance(), // app instance + NULL // creation parameters + ); + + if ( !m_hWnd ) { - if (parent->GetDefaultItem() == (wxButton*) this) - parent->SetDefaultItem(NULL); +#ifdef __WXDEBUG__ + wxLogError(_T("Failed to create a control of class '%s'"), classname); +#endif // DEBUG + + return FALSE; } + + // subclass again for purposes of dialog editing mode + SubclassWin(m_hWnd); + + // controls use the same font and colours as their parent dialog by default + InheritAttributes(); + + return TRUE; +} + +wxSize wxControl::DoGetBestSize() +{ + return wxSize(DEFAULT_ITEM_WIDTH, DEFAULT_ITEM_HEIGHT); } bool wxControl::ProcessCommand(wxCommandEvent& event) @@ -151,6 +180,19 @@ void wxControl::OnEraseBackground(wxEraseEvent& event) ::SetMapMode((HDC) event.GetDC()->GetHDC(), mode); } +WXDWORD wxControl::GetExStyle(WXDWORD& style) const +{ + bool want3D; + WXDWORD exStyle = Determine3DEffects(WS_EX_CLIENTEDGE, &want3D) ; + + // Even with extended styles, need to combine with WS_BORDER + // for them to look right. + if ( want3D || wxStyleHasBorder(m_windowStyle) ) + style |= WS_BORDER; + + return exStyle; +} + // --------------------------------------------------------------------------- // global functions // ---------------------------------------------------------------------------