MFC 9.0新界面字体的美化

接上一篇。据说这个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(),故或许在处理这两个消息之后应该重新把字体设回来(我没有试验)。

你可能感兴趣的:(null,mfc,工具,library,微软)