Ian*_*oyd 7 delphi winapi themes uxtheme
我正在使用DrawThemeTextEx来绘制文本.我试图使用结构的crTextCOLORREF成员以特定颜色绘制它DTTOPS:
procedure DrawThemeText(dc: HDC; text: WideString; font: TFont; pt: TPoint; foreColor: COLORREF);
var
R: TRect;
dttOpts: TDttOpts;
hOldFont: HFONT;
oldColor: COLORREF;
begin
foreColor := $FF00FF00; //bright lime green
font.
R := Rect(pt.x, pt.y, $7fffffff, $7fffffff);
ZeroMemory(@dttOpts, SizeOf(TDTTOpts));
dttOpts.dwSize := SizeOf(TDTTOpts);
dttOpts.iGlowSize := 1;
dttOpts.crText := foreColor;
dttOpts.dwFlags := DTT_GLOWSIZE or DTT_TEXTCOLOR;
hOldFont := SelectObject(dc, font.Handle);
oldColor := SetTextColor(dc, foreColor);
try
hr := DrawThemeTextEx(ThemeServices.Theme[teWindow], DC, WP_CAPTION, CS_ACTIVE,
PWideChar(Text), Length(Text),
DT_LEFT or DT_TOP or DT_SINGLELINE or DT_NOPREFIX, R, dttOpts);
finally
SetTextColor(dc, oldColor);
SelectObject(dc, hOldFont);
end;
Run Code Online (Sandbox Code Playgroud)
不幸的是,文本颜色总是黑色,而不是我的代码指定的明亮的柠檬绿颜色:

我可以改变字体,其用于通过选择新的字体到设备上下文,即:
SelectObject(dc, font.Handle);
Run Code Online (Sandbox Code Playgroud)
但既不SetTextColor,也不设定crText与DTT_TEXTCOLOR所述的选择DTTOPS的结构,改变所使用的文字颜色.
令人困惑的是,DTTOPS结构允许我指定一种颜色:
Run Code Online (Sandbox Code Playgroud)typedef struct _DTTOPTS { DWORD dwSize; // size of the struct DWORD dwFlags; // which options have been specified COLORREF crText; // color to use for text fill COLORREF crBorder; // color to use for text outline COLORREF crShadow; // color to use for text shadow ...
以及DTT_TEXTCOLOR标志以指示我正在使用该成员:
Run Code Online (Sandbox Code Playgroud)#define DTT_TEXTCOLOR (1UL << 0) // crText has been specified
我想要完成的是记录,但它不能正常工作.显然我做错了什么.
使用DrawThemeTextEx绘制文本时如何指定文本颜色?
| 归档时间: |
|
| 查看次数: |
1355 次 |
| 最近记录: |