我正在處理自定義標題控件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