add support for multiline labels in wxToggleButton

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54955 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2008-08-03 11:47:01 +00:00
parent 402c3347d2
commit 9016f3ad73
6 changed files with 94 additions and 112 deletions

View File

@@ -11,6 +11,27 @@
#ifndef _WX_MSW_PRIVATE_BUTTON_H_
#define _WX_MSW_PRIVATE_BUTTON_H_
// define some standard button constants which may be missing in the headers
#ifndef BS_PUSHLIKE
#define BS_PUSHLIKE 0x00001000L
#endif
#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
namespace wxMSWButton
{
@@ -40,6 +61,36 @@ inline void UpdateMultilineStyle(HWND hwnd, const wxString& label)
::SetWindowLong(hwnd, GWL_STYLE, styleNew);
}
// common implementation of wxButton and wxToggleButton::DoGetBestSize()
inline wxSize ComputeBestSize(wxControl *btn)
{
wxClientDC dc(btn);
wxCoord wBtn,
hBtn;
dc.GetMultiLineTextExtent(btn->GetLabelText(), &wBtn, &hBtn);
// FIXME: this is pure guesswork, need to retrieve the real button margins
wBtn += 3*btn->GetCharWidth();
hBtn = 11*EDIT_HEIGHT_FROM_CHAR_HEIGHT(hBtn)/10;
// all buttons have at least the standard size unless the user explicitly
// wants them to be of smaller size and used wxBU_EXACTFIT style when
// creating the button
if ( !btn->HasFlag(wxBU_EXACTFIT) )
{
wxSize sz = wxButton::GetDefaultSize();
if ( wBtn < sz.x )
wBtn = sz.x;
if ( hBtn < sz.y )
hBtn = sz.y;
}
wxSize best(wBtn, hBtn);
btn->CacheBestSize(best);
return best;
}
} // namespace wxMSWButton
#endif // _WX_MSW_PRIVATE_BUTTON_H_