我正在尝试在窗口上绘制主题文字。然而,取代主题字体,我总是得到像大胆的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(成功)。
答案 0 :(得分:2)
嗯,你几乎就在那里,你正在获得Explorer主题风格。只是一个错误的假设,树视图的主题确实不规定了一种字体。例如,在.NET TreeView类中可以看到,您可以随意分配其Font属性,并获得所需的字体。从逻辑上讲,你没有在任何地方指定字体大小,所以没有合理的方法让主题api猜测正确大小的字体。现在,您只是获取在设备上下文中选择的默认字体。
您 选择要使用的字体。