接上一篇。据说这个bug在新版的BCGControlBar Library中已经解决了。咱是免费的,只能自己动手。字体的设置保存在一个全局变量afxGlobalData中,此变量定义AfxGlobals.h中。字体是在AFX_GLOBAL_DATA::UpdateData中设定的。如果要一劳永逸,就得rebuild MFC,不推荐这样,还是等微软更新吧。
我的工程中只用到了菜单,tooltip和dock pane,有变通的方法可以改正字体。
对于菜单,在CMainFrame::OnCreate中创建了CMFCMenuBar之后,用该类提供的SetMenuFont即可很容易的改正字体,只要传入一个LOGFONT结构的指针即可,改动此处将会改动工具栏和dock pane caption字体;
对于tooltips,粗略看了一下,没有找到接口,那么就只好在InitInstance中改了:
if(afxGlobalData.fontTooltip.GetSafeHandle() != NULL)
{
::DeleteObject(afxGlobalData.fontTooltip.Detach());
}
LOGFONT logfont = {0};
::SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(LOGFONT), &logfont, 0);
afxGlobalData.fontTooltip.CreateFontIndirect(&logfont);
检查MFC代码,在WM_SETTINGCHANGE的处理函数中会调用AFX_GLOBAL_DATA::UpdateFonts(),故或许在处理这两个消息之后应该重新把字体设回来(我没有试验)。