/////////////////////////////////////////////////////////////////////////////
-// Name: msw/checkbox.cpp
+// Name: src/msw/checkbox.cpp
// Purpose: wxCheckBox
// Author: Julian Smart
// Modified by:
// headers
// ----------------------------------------------------------------------------
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma implementation "checkbox.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#if wxUSE_CHECKBOX
+#include "wx/checkbox.h"
+
#ifndef WX_PRECOMP
- #include "wx/checkbox.h"
#include "wx/brush.h"
+ #include "wx/dcclient.h"
#include "wx/dcscreen.h"
#include "wx/settings.h"
#endif
+#include "wx/msw/dc.h" // for wxDCTemp
+#include "wx/renderer.h"
#include "wx/msw/uxtheme.h"
-#include "wx/msw/private.h"
+#include "wx/msw/private/button.h"
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
-#ifndef BST_UNCHECKED
- #define BST_UNCHECKED 0x0000
-#endif
-
-#ifndef BST_CHECKED
- #define BST_CHECKED 0x0001
-#endif
-
-#ifndef BST_INDETERMINATE
- #define BST_INDETERMINATE 0x0002
-#endif
-
-#ifndef DFCS_HOT
- #define DFCS_HOT 0x1000
-#endif
-
-#ifndef DT_HIDEPREFIX
- #define DT_HIDEPREFIX 0x00100000
-#endif
-
#ifndef BP_CHECKBOX
#define BP_CHECKBOX 3
#endif
msStyle |= BS_LEFTTEXT | BS_RIGHT;
}
+ msStyle |= wxMSWButton::GetMultilineStyle(label);
+
return MSWCreateControl(wxT("BUTTON"), msStyle, pos, size, label, 0);
}
wxString str = wxGetWindowText(GetHWND());
int wCheckbox, hCheckbox;
- if ( !str.IsEmpty() )
+ if ( !str.empty() )
{
- GetTextExtent(str, &wCheckbox, &hCheckbox);
+ wxClientDC dc(const_cast<wxCheckBox *>(this));
+ dc.SetFont(GetFont());
+ dc.GetMultiLineTextExtent(GetLabelText(str), &wCheckbox, &hCheckbox);
wCheckbox += s_checkSize + GetCharWidth();
if ( hCheckbox < s_checkSize )
// wxCheckBox operations
// ----------------------------------------------------------------------------
+void wxCheckBox::SetLabel(const wxString& label)
+{
+ wxMSWButton::UpdateMultilineStyle(GetHwnd(), label);
+
+ wxCheckBoxBase::SetLabel(label);
+}
+
void wxCheckBox::SetValue(bool val)
{
Set3StateValue(val ? wxCHK_CHECKED : wxCHK_UNCHECKED);
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
-#if 0
- 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:
}
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;
+ flags |= wxCONTROL_CURRENT;
- wxUxThemeHandle theme(this, L"BUTTON");
- if ( !theme )
- return false;
-
- 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();
// 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)"));
::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()"));
}