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:
Vadim Zeitlin 2005-05-22 22:53:11 +00:00
parent 58e041b753
commit cbbb6724af

View File

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