fixed drawing of owner drawn buttons with multiline labels
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@34276 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
58e041b753
commit
cbbb6724af
@ -497,8 +497,31 @@ static void DrawButtonText(HDC hdc,
|
||||
COLORREF colOld = SetTextColor(hdc, col);
|
||||
int modeOld = SetBkMode(hdc, TRANSPARENT);
|
||||
|
||||
// Note: we must have DT_SINGLELINE for DT_VCENTER to work.
|
||||
::DrawText(hdc, text, text.length(), pRect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
|
||||
if ( text.find(_T('\n')) != wxString::npos )
|
||||
{
|
||||
// draw multiline label
|
||||
|
||||
// first we need to compute its bounding rect
|
||||
RECT rc;
|
||||
::CopyRect(&rc, pRect);
|
||||
::DrawText(hdc, text, text.length(), &rc, DT_CENTER | DT_CALCRECT);
|
||||
|
||||
// now center this rect inside the entire button area
|
||||
const LONG w = rc.right - rc.left;
|
||||
const LONG h = rc.bottom - rc.top;
|
||||
rc.left = (pRect->right - pRect->left)/2 - w/2;
|
||||
rc.right = rc.left+w;
|
||||
rc.top = (pRect->bottom - pRect->top)/2 - h/2;
|
||||
rc.bottom = rc.top+h;
|
||||
|
||||
::DrawText(hdc, text, text.length(), &rc, DT_CENTER);
|
||||
}
|
||||
else // single line label
|
||||
{
|
||||
// Note: we must have DT_SINGLELINE for DT_VCENTER to work.
|
||||
::DrawText(hdc, text, text.length(), pRect,
|
||||
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
|
||||
}
|
||||
|
||||
SetBkMode(hdc, modeOld);
|
||||
SetTextColor(hdc, colOld);
|
||||
|
Loading…
Reference in New Issue
Block a user