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
This commit is contained in:
Vadim Zeitlin 2011-12-16 11:03:15 +00:00
parent a97f71fa60
commit 35f92de300

View File

@ -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;
}