3

我正在尝试在窗口上绘制主题文本。然而,我总是得到像粗体 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(成功)。

4

1 回答 1

2

好吧,您快到了,您将获得 Explorer 主题样式。只是一个错误的假设,树视图的主题没有规定字体。例如,在 .NET TreeView 类中非常明显,您可以任意分配其 Font 属性,您将获得请求的字体。从逻辑上讲,您没有在任何地方指定字体大小,因此主题 api 没有合理的方法来猜测适当大小的字体。现在,您只是获得在设备上下文中选择的默认字体。

必须选择要使用的字体。

于 2013-01-06T18:25:53.070 回答