X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/025f7d775c8366dec72258e0d9d83848203c4871..a2abe5f08113b25ce20c1710c7361d27a5cb12eb:/src/msw/checkbox.cpp diff --git a/src/msw/checkbox.cpp b/src/msw/checkbox.cpp index 02a5a495c5..2a9e8643ef 100644 --- a/src/msw/checkbox.cpp +++ b/src/msw/checkbox.cpp @@ -30,34 +30,21 @@ #ifndef WX_PRECOMP #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/msw/uxtheme.h" #include "wx/renderer.h" +#include "wx/msw/uxtheme.h" +#include "wx/msw/private/button.h" +#include "wx/msw/missing.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 DT_HIDEPREFIX - #define DT_HIDEPREFIX 0x00100000 -#endif - #ifndef BP_CHECKBOX #define BP_CHECKBOX 3 #endif @@ -166,28 +153,24 @@ bool wxCheckBox::Create(wxWindow *parent, { Init(); + WXValidateStyle(&style); if ( !CreateControl(parent, id, pos, size, style, validator, name) ) return false; long msStyle = WS_TABSTOP; if ( style & wxCHK_3STATE ) - { msStyle |= BS_3STATE; - } else - { - wxASSERT_MSG( !Is3rdStateAllowedForUser(), - wxT("Using wxCH_ALLOW_3RD_STATE_FOR_USER") - wxT(" style flag for a 2-state checkbox is useless") ); msStyle |= BS_CHECKBOX; - } if ( style & wxALIGN_RIGHT ) { msStyle |= BS_LEFTTEXT | BS_RIGHT; } + msStyle |= wxMSWButton::GetMultilineStyle(label); + return MSWCreateControl(wxT("BUTTON"), msStyle, pos, size, label, 0); } @@ -212,7 +195,9 @@ wxSize wxCheckBox::DoGetBestSize() const int wCheckbox, hCheckbox; if ( !str.empty() ) { - GetTextExtent(GetLabelText(str), &wCheckbox, &hCheckbox); + wxClientDC dc(const_cast(this)); + dc.SetFont(GetFont()); + dc.GetMultiLineTextExtent(GetLabelText(str), &wCheckbox, &hCheckbox); wCheckbox += s_checkSize + GetCharWidth(); if ( hCheckbox < s_checkSize ) @@ -236,6 +221,13 @@ wxSize wxCheckBox::DoGetBestSize() const // 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); @@ -463,7 +455,7 @@ bool wxCheckBox::MSWOnDraw(WXDRAWITEMSTRUCT *item) break; default: - wxFAIL_MSG( _T("unexpected Get3StateValue() return value") ); + wxFAIL_MSG( wxT("unexpected Get3StateValue() return value") ); // fall through case wxCHK_UNCHECKED: @@ -498,7 +490,7 @@ bool wxCheckBox::MSWOnDraw(WXDRAWITEMSTRUCT *item) if ( !::DrawText(hdc, label.wx_str(), label.length(), &rectLabel, fmt | DT_CALCRECT) ) { - wxLogLastError(_T("DrawText(DT_CALCRECT)")); + wxLogLastError(wxT("DrawText(DT_CALCRECT)")); } } @@ -509,7 +501,7 @@ bool wxCheckBox::MSWOnDraw(WXDRAWITEMSTRUCT *item) if ( !::DrawText(hdc, label.wx_str(), label.length(), &rectLabel, fmt) ) { - wxLogLastError(_T("DrawText()")); + wxLogLastError(wxT("DrawText()")); } // finally draw the focus @@ -519,7 +511,7 @@ bool wxCheckBox::MSWOnDraw(WXDRAWITEMSTRUCT *item) rectLabel.right++; if ( !::DrawFocusRect(hdc, &rectLabel) ) { - wxLogLastError(_T("DrawFocusRect()")); + wxLogLastError(wxT("DrawFocusRect()")); } }