From: Vadim Zeitlin Date: Fri, 16 Dec 2011 11:03:15 +0000 (+0000) Subject: Make multiline checkboxes wider in wxMSW to avoid word wrap. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/35f92de30054e0db3ffc8f4abb3e6dcb541c4b2f Make multiline checkboxes wider in wxMSW to avoid word wrap. 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 --- diff --git a/src/msw/checkbox.cpp b/src/msw/checkbox.cpp index 3e4c964624..9e0aeede7f 100644 --- a/src/msw/checkbox.cpp +++ b/src/msw/checkbox.cpp @@ -147,6 +147,19 @@ wxSize wxCheckBox::DoGetBestSize() const 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; }