Я пытаюсь нарисовать тематический текст в окне. Однако вместо тематического шрифта я всегда получаю что-то вроде жирного шрифта 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 (успех).
Ну, вы почти там, вы получаете стиль темы Explorer. Только одно неверное предположение, тема для дерева не прописать шрифт Например, он хорошо виден в классе .NET TreeView, вы можете произвольно назначить его свойство Font, и вы получите запрошенный шрифт. И логически очевидно, что вы нигде не указали размер шрифта, поэтому у API тем не было разумного способа угадать шрифт правильного размера. Сейчас вы просто получаете шрифт по умолчанию, который выбран в контексте устройства.
Вы иметь выбрать шрифт, который вы хотите использовать.
Других решений пока нет …