我主要是做了以下几个测试,验证下想法,结果只有最后一个可以,如果大家有不同的测试结果,欢迎讨论
NO.1 通过GetFont获取窗口的字体,然后修改字体,再通过SetFont设置字体(失败)
原因是GetFont返回的是个空指针,也就是它的m_hObject不存在,根本找不到字体资源,别说修改了。
NO.2 直接创建一种字体(局部变量),然后用SetFont设置(失败)
这个可以从MSDN中关于SetFont的用法中找到答案。 For this function to work correctly in a Windows-based application, you must ensure that the CFont object specified in the SetFont() call is not destroyed until after the specified control has been destroyed. 如果把字体设成全局变量,应该没有问题(没有测试),但估计没有人这样设计程序。如果字体是你窗口里的一个成员,当然可以这么做了。
NO.3 在按钮的DrawItem方法里实现(成功)
首先得保证你的按钮风格是OWNERDRAW,原因就不用说了。然后设计你的字体,加载到设备环境中,这们就可以实现。