Как изменить цвет шрифта темы DrawThemeTextEx?

Я использую DrawThemeTextEx для рисования текста. Я пытаюсь нарисовать его определенным цветом, используя член crText COLORREF структуры 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;

К сожалению, цвет текста всегда получается черным, а не ярким лаймово-зеленым, который задает мой код:

enter image description here

Я могу изменить шрифт, который используется, выбрав новый шрифт в контексте устройства, т.е.:

   SelectObject(dc, font.Handle);

но ни один из этих шрифтов не используется.

   SelectObject(dc, font.Handle);

но ни SetTextColor, ни установка опций crText и DTT_TEXTCOLOR структуры DTTOPS не изменяют используемый цвет текста.

Смущает то, что структура DTTOPS позволяет мне указать цвет:

typedef struct _DTTOPTS
{
 DWORD dwSize; // размер структуры
 DWORD dwFlags; // какие опции были указаны
 COLORREF crText; // цвет, используемый для заливки текста
 COLORREF crBorder; // цвет, используемый для обводки текста
 COLORREF crShadow; // цвет, используемый для тени текста
 ...

вместе с флагом DTT_TEXTCOLOR, чтобы указать, что я использую этот член:

 #define DTT_TEXTCOLOR (1UL 

То, чего я хочу добиться задокументировано , но это не работает правильно. Очевидно, я делаю что-то не так.

Как указать цвет текста при рисовании текста с помощью DrawThemeTextEx?

7
задан Ian Boyd 19 July 2011 в 02:00
поделиться