X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/32cd189dfcfe96c41e32c3b9827bf67484c60b13..950905affdfa9041316f82308e1a11e82c783070:/src/msw/checkbox.cpp diff --git a/src/msw/checkbox.cpp b/src/msw/checkbox.cpp index 4a11fa5c46..1b47fbe0a4 100644 --- a/src/msw/checkbox.cpp +++ b/src/msw/checkbox.cpp @@ -35,7 +35,7 @@ #endif #include "wx/msw/uxtheme.h" -#include "wx/msw/private.h" +#include "wx/renderer.h" // ---------------------------------------------------------------------------- // constants @@ -53,10 +53,6 @@ #define BST_INDETERMINATE 0x0002 #endif -#ifndef DFCS_HOT - #define DFCS_HOT 0x1000 -#endif - #ifndef DT_HIDEPREFIX #define DT_HIDEPREFIX 0x00100000 #endif @@ -449,24 +445,20 @@ bool wxCheckBox::MSWOnDraw(WXDRAWITEMSTRUCT *item) const bool isFocused = m_isPressed || FindFocus() == this; - // draw the checkbox itself: note that this should really, really be in - // wxRendererNative but unfortunately we can't add a new virtual function - // to it without breaking backwards compatibility + // draw the checkbox itself + wxDCTemp dc(hdc); - // classic Win32 version -- this can be useful when we move this into - // wxRendererNative -#if defined(__WXWINCE__) || !wxUSE_UXTHEME - UINT state = DFCS_BUTTONCHECK; + int flags = 0; if ( !IsEnabled() ) - state |= DFCS_INACTIVE; + flags |= wxCONTROL_DISABLED; switch ( Get3StateValue() ) { case wxCHK_CHECKED: - state |= DFCS_CHECKED; + flags |= wxCONTROL_CHECKED; break; case wxCHK_UNDETERMINED: - state |= DFCS_PUSHED; + flags |= wxCONTROL_PRESSED; break; default: @@ -479,62 +471,10 @@ bool wxCheckBox::MSWOnDraw(WXDRAWITEMSTRUCT *item) } if ( wxFindWindowAtPoint(wxGetMousePosition()) == this ) - state |= DFCS_HOT; - - if ( !::DrawFrameControl(hdc, &rectCheck, DFC_BUTTON, state) ) - { - wxLogLastError(_T("DrawFrameControl(DFC_BUTTON)")); - } -#else // XP version - wxUxThemeEngine *themeEngine = wxUxThemeEngine::GetIfActive(); - if ( !themeEngine ) - return false; - - wxUxThemeHandle theme(this, L"BUTTON"); - if ( !theme ) - return false; + flags |= wxCONTROL_CURRENT; - int state; - switch ( Get3StateValue() ) - { - case wxCHK_CHECKED: - state = CBS_CHECKEDNORMAL; - break; - - case wxCHK_UNDETERMINED: - state = CBS_MIXEDNORMAL; - break; - - default: - wxFAIL_MSG( _T("unexpected Get3StateValue() return value") ); - // fall through - - case wxCHK_UNCHECKED: - state = CBS_UNCHECKEDNORMAL; - break; - } - - if ( !IsEnabled() ) - state += CBS_DISABLED_OFFSET; - else if ( m_isPressed ) - state += CBS_PRESSED_OFFSET; - else if ( m_isHot ) - state += CBS_HOT_OFFSET; - - HRESULT hr = themeEngine->DrawThemeBackground - ( - theme, - hdc, - BP_CHECKBOX, - state, - &rectCheck, - NULL - ); - if ( FAILED(hr) ) - { - wxLogApiError(_T("DrawThemeBackground(BP_CHECKBOX)"), hr); - } -#endif // 0/1 + wxRendererNative::Get(). + DrawCheckBox(this, dc, wxRectFromRECT(rectCheck), flags); // draw the text const wxString& label = GetLabel(); @@ -554,7 +494,7 @@ bool wxCheckBox::MSWOnDraw(WXDRAWITEMSTRUCT *item) // around it if ( isFocused ) { - if ( !::DrawText(hdc, label, label.length(), &rectLabel, + if ( !::DrawText(hdc, label.wx_str(), label.length(), &rectLabel, fmt | DT_CALCRECT) ) { wxLogLastError(_T("DrawText(DT_CALCRECT)")); @@ -566,7 +506,7 @@ bool wxCheckBox::MSWOnDraw(WXDRAWITEMSTRUCT *item) ::SetTextColor(hdc, ::GetSysColor(COLOR_GRAYTEXT)); } - if ( !::DrawText(hdc, label, label.length(), &rectLabel, fmt) ) + if ( !::DrawText(hdc, label.wx_str(), label.length(), &rectLabel, fmt) ) { wxLogLastError(_T("DrawText()")); }