Почему 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 (успех).

1 ответ

Решение

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

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

Другие вопросы по тегам