]> git.saurik.com Git - wxWidgets.git/commitdiff
Make multiline checkboxes wider in wxMSW to avoid word wrap.
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 16 Dec 2011 11:03:15 +0000 (11:03 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 16 Dec 2011 11:03:15 +0000 (11:03 +0000)
At least for some versions of Windows (Server 2003 with classic look and feel)
the native checkboxes auto wrapped the label as it wrongly considered that the
width we specified for it was not big enough. Compensate for this by making
the checkbox wider -- this is just a hack but still better than corrupting the
checkbox display.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70015 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/msw/checkbox.cpp

index 3e4c9646247cc007d82a82559d54817d81df2d84..9e0aeede7fb867c42f0519a4e068a1a64ca570d5 100644 (file)
@@ -147,6 +147,19 @@ wxSize wxCheckBox::DoGetBestSize() const
         dc.GetMultiLineTextExtent(GetLabelText(str), &wCheckbox, &hCheckbox);
         wCheckbox += s_checkSize + GetCharWidth();
 
         dc.GetMultiLineTextExtent(GetLabelText(str), &wCheckbox, &hCheckbox);
         wCheckbox += s_checkSize + GetCharWidth();
 
+        if ( ::GetWindowLong(GetHwnd(), GWL_STYLE) & BS_MULTILINE )
+        {
+            // We need to make the checkbox even wider in this case because
+            // otherwise it wraps lines automatically and not only on "\n"s as
+            // we need and this makes the size computed here wrong resulting in
+            // checkbox contents being truncated when it's actually displayed.
+            // Without this hack simple checkbox with "Some thing\n and more"
+            // label appears on 3 lines, not 2, under Windows 2003 using
+            // classic look and feel (although it works fine under Windows 7,
+            // with or without themes).
+            wCheckbox += s_checkSize;
+        }
+
         if ( hCheckbox < s_checkSize )
             hCheckbox = s_checkSize;
     }
         if ( hCheckbox < s_checkSize )
             hCheckbox = s_checkSize;
     }