当前位置:  开发笔记 > 开发工具 > 正文

如何为通过CreateWindow创建的窗口指定字体?

如何解决《如何为通过CreateWindow创建的窗口指定字体?》经验,为你挑选了3个好方法。

我正在使用纯Win32 API(RegisterClass和CreateWindow函数)创建窗口.如何为窗口指定字体而不是系统定义的字体?



1> Matthew Xavi..:

创建自己的窗口类时,您自己负责管理字体.此任务将包含四个部分:

    创建窗口时(即处理WM_CREATE时),使用CreateFont()或CreateFontIndirect()获取要在窗口中使用的字体的HFONT.您需要将此HFONT与您为窗口类的每个实例保留的其他数据一起存储.您也可以选择让窗口类处理WM_GETFONT和WM_SETFONT,但顶级窗口通常不需要它(如果您正在创建控件窗口类,则需要处理WM_SETFONT,因为对话管理器发送该消息).

    如果您的窗口包含任何包含文本的子窗口,则每当窗口的字体发生更改时,都会向它们发送WM_SETFONT消息.所有常见的Windows控件都处理WM_SETFONT.

    当您绘制窗口的内容时(通常是响应WM_PAINT消息),在绘制文本之前(或使用文本函数或GetTextMetrics()),使用SelectObject()函数在设备上下文中选择HFONT .

    当窗口被销毁时(即当您处理WM_DESTROY时),使用DeleteObject()释放您在步骤1中创建的字体.请注意,如果您选择在窗口中处理WM_SETFONT,请不要删除在WM_SETFONT中收到的字体对象处理程序,因为发送消息的代码希望保留该句柄的所有权.



2> Bob Jones..:

正如vividos所说,只需使用CreateFont()/ CreateFontIndirect:

HFONT hFont = CreateFont (13, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, ANSI_CHARSET, 
      OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, 
      DEFAULT_PITCH | FF_DONTCARE, TEXT("Tahoma"));

然后使用WM_SETFONT消息为您的窗口/控件设置此字体:

SendMessage(window, WM_SETFONT, hFont, TRUE);



3> vividos..:

如果您对已经拥有自己的字体句柄的标准公共控件进行超类,请使用以下方法:使用CreateFont或创建字体CreateFontIndirect并使用WM_SETFONT消息进行设置(在MFC和ATL中会有相应的SetFont函数).当不再需要该字体时,使用破坏字体DeleteObject.请务必不要破坏窗口以前设置的字体.

如果您正在编写自己绘制的自定义控件,只需使用CreateFont或创建一个新的字体对象CreateFontIndirect,并将其存储在您的类中.如果要支持第三方用户,请处理WM_SETFONTWM_GETFONT让用户设置另一种字体.绘画时,使用存储在班级中的当前字体对象.

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有