]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/checkbox.cpp
Use locale-specific decimal point in wxNumericPropertyValidator (fixes #12790)
[wxWidgets.git] / src / msw / checkbox.cpp
index 02a5a495c55ee59123880ba62abfc1d3febcba0c..2a9e8643ef0cf99636b1b8eaf7ea37ddffcd5588 100644 (file)
 
 #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<wxCheckBox *>(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()"));
         }
     }