Am 13.09.2012 08:26, schrieb Dirk Noack:
> zunᅵchst danke fᅵr deine Ausfᅵhrungen, die haben mir sehr geholfen in
> der Sache voranzukommen.
[...]
> Mit der Methode "GetButtonStyle()" versuche ich entsprechend auf
> BS_LEFT, BS_RIGHT, usw. zu reagieren, jedoch kommen diese Stile gar
GetButtonStyle():
Returns the button styles for this CButton object. This function returns
only the BS_ style values, not any of the other window styles.
Du musst GetStyle() verwenden. Der MSDN Text ist hier etwas irrefᅵhrend.
Es werden nᅵmlich nur die mit BS_TYPEMASK und BS_LEFTTEXT maskierten
Bits zurᅵckgegeben.
Aktivierung von OwnerDraw in PresubclassWindows():
ModifyStyle(BS_TYPEMASK, BS_OWNERDRAW, SWP_FRAMECHANGED);
Beim ermitteln der Textformatierung musst du noch darauf achten, dass
die meisten Flags Kombinationen sind (z.B. BS_RIGHT = 0x200, BS_CENTER =
0x300). Ich verwende folgendes:
DWORD nStyle = GetStyle();
UINT uFormat = 0;
if (nStyle & BS_MULTILINE)
uFormat = DT_WORDBREAK;
else // single line
{
// must set this for DT_BOTTOM and DT_VCENTER
uFormat |= DT_SINGLELINE;
// get vertical alignment
switch (nStyle & BS_VCENTER)
{
case BS_BOTTOM : // bottom align
uFormat |= DT_BOTTOM;
case BS_TOP : // top align; DT_TOP is 0
break;
// case BS_VCENTER : // vertically centered
// case 0 : // default; treat as centered
default :
uFormat |= DT_VCENTER;
}
}
switch (nStyle & BS_CENTER) // get horizontal alignment
{
case BS_RIGHT : // right align
uFormat |= DT_RIGHT;
break;
case BS_CENTER : // centered
uFormat |= DT_CENTER;
break;
// case BS_LEFT : // left align;
// case 0 : // default; treat as left
// default :
// uFormat |= DT_LEFT; // DT_LEFT is 0
}
// Windows 2000/XP: Hide accelerator (no underline for shortcut)
if (lpDrawItemStruct->itemState & ODS_NOACCEL)
uFormat |= DT_HIDEPREFIX;
Joe