我正在处理自定义标题控件CMyHeaderCtrl
,它从MFC类CHeaderCtrl
派生而来,并覆盖DrawItem
方法以在应用程序为主题时执行一些自定义绘图。起初,我尝试确定标题项目的主题字体,但它失败并且GetThemeFont
返回结果'element not found' (0x80070490)
。GetThemeFont函数不起作用
它使用该控制应用程序被针对公共控件6. 联下面是一些示例代码:
void MyHeaderCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
if(IsThemeActive() && IsAppThemed() && ComCtlVersionOK())
{
if(HTHEME hTheme = OpenThemeData(m_hWnd, L"HEADER"))
{
LOGFONTW lfw;
HRESULT hr = GetThemeFont(hTheme, lpDrawItemStruct->hDC, HP_HEADERITEM, HIS_NORMAL, TMT_CAPTIONFONT, &lfw);
ASSERT(hr == S_OK);
// ...
CloseThemeData(hTheme);
}
}
}
我也已经尝试过其他性能比TMT_CAPTIONFONT
像TMT_SMALLCAPTIONFONT
,TMT_BODYFONT
等。这里有什么可能是错的?
感谢您的信息。这看起来确实如此。我也尝试过'CWnd :: GetFont()',它为控件返回正确的字体。你更喜欢哪个函数:'GetThemeSysFont'或者'CWnd :: GetFont'? – alexfr
回顾我写的代码,我通常依靠CWnd :: GetFont()来做正确的事情。当一个主题出现,其中有不同的字体,也许我会回去更改代码... – DavidK