Почему DrawThemeText не работает должным образом?

Я пытаюсь нарисовать тематический текст в окне. Однако вместо тематического шрифта я всегда получаю что-то вроде жирного шрифта MS Sans Serif без сглаживания. Почему это так?


Редактировать:

После применения упомянутых изменений код выглядит так:

INITCOMMONCONTROLSEX ctrl;
ctrl.dwSize = sizeof(ctrl);
ctrl.dwICC = ICC_TREEVIEW_CLASSES;
InitCommonControlsEx(&ctrl);

(…)

SetWindowTheme(mainWinHWND, L"explorer", nullptr);

(…)

case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);

HTHEME theme = OpenThemeData(hwnd, L"TREEVIEW");
RECT rect;
rect.left = 100;
rect.top = 100;
rect.right = 200;
rect.bottom = 200;
DrawThemeText(theme,
hdc,
TVP_TREEITEM,
TREIS_NORMAL,
L"Ala ma kota",
11,
DT_VCENTER | DT_LEFT,
0,
&rect);
CloseThemeData(theme);

EndPaint(hwnd, &ps);
return 0L;
}

Эффект все тот же.


Весь код (~ 100 строк): http://pastebin.com/ZheZyrWy
Обратите внимание, что это всего лишь программа для проверки концепции, и поэтому я не включил проверку ошибок. Но DrawThemeText возвращает 0 (успех).

2

Решение

Ну, вы почти там, вы получаете стиль темы Explorer. Только одно неверное предположение, тема для дерева не прописать шрифт Например, он хорошо виден в классе .NET TreeView, вы можете произвольно назначить его свойство Font, и вы получите запрошенный шрифт. И логически очевидно, что вы нигде не указали размер шрифта, поэтому у API тем не было разумного способа угадать шрифт правильного размера. Сейчас вы просто получаете шрифт по умолчанию, который выбран в контексте устройства.

Вы иметь выбрать шрифт, который вы хотите использовать.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]