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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值