如何为 Win32 应用程序中的所有窗口设置默认字体?
我希望应用程序中的所有控件(编辑、列表控件等)都具有相同的字体,这不是系统默认值。 我该怎么做呢? 是否有任何 Win32 API 可以设置应用程序默认字体?
I want all the controls (edit,list control, etc) in my application to be having the same font which is not the system default. How do i do this? Is there any Win32 API that sets the application default font?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
实现这一点:
在一个单独的文件中或在 main.cpp 中,然后运行:
只要您愿意,例如在创建所有子窗口之后的
WM_CREATE
消息中!我的 win32 GUI 应用程序解决方案中始终有一个
SetFont.cpp
和一个SetFont.h
。Implement this:
inside a separate file or just in the main.cpp and then just run:
whenever you want, for example in the
WM_CREATE
message, after you've created all your child windows!I always have a
SetFont.cpp
and aSetFont.h
in my win32 GUI application solutions.Windows 不提供任何应用程序范围字体的机制。 每个窗口类可能有自己的行为来选择默认使用的字体。 它可能会尝试选择 Windows shell 对话框使用的字体,或者可能只是使用自动选择到新 DC 中的可怕的位图“系统”字体来绘制文本。
Windows 公共控制窗口类均响应
WM_SETFONT< /code>
,这是标准窗口消息,用于告诉窗口您希望它使用什么字体。 当您实现自己的窗口类(尤其是新的子控件窗口类)时,您还应该为
WM_SETFONT
编写一个处理程序:WM_SETFONT
处理程序应该将消息转发给他们每个人。WM_SETFONT
处理程序中,并将其选择到您在绘制窗口时使用的 DC 中。WM_SETFONT
消息。请注意,对话管理器会为您完成其中的一些工作; 实例化对话框模板时,新对话框的字体设置为模板中命名的字体,并且对话框发送
WM_SETFONT
其所有子控件。Windows does not provide any mechanism for an application-wide font. Each window class may have its own behavior for choosing a font to use by default. It may try to select the font used by Windows shell dialogs, or it may simply draw its text using the horrid bitmap 'system' font automatically selected into new DCs.
The Windows common control window classes all respond to
WM_SETFONT
, which is the standard window message for telling a window what font you want it to use. When you implement your own window classes (especially new child control window classes), you should also write a handler forWM_SETFONT
:WM_SETFONT
handler should forward the message to each of them.WM_SETFONT
handler and select it into the DC you use when drawing your window.WM_SETFONT
message.Note that the dialog manager does some of this for you; when instantiating a dialog template, the new dialog's font is set to the font named in the template, and the dialog sends
WM_SETFONT
all of its child controls.是的你可以 !
Yes you can !
一种在一次调用中设置所有子窗口字体的便捷方法:
A handy method for setting the font for all child windows in one call:
你不能,没有办法同时对所有控件执行此操作。 您需要通过资源编辑器进行设置,如之前所建议的那样,或者在每个控件上手动调用 SetFont()。
You can't, there is no way to do this for all controls at the same time. You'll need to set it through the resource editor, as was suggested before, or call SetFont() manually on every control.
您可以通过资源视图设置每个对话框的字体。 右键单击对话框(而不是其他控件),选择属性和字体选项。
You can set the font for each Dialog box through the resources view. Right click on a dialog (not on other control), select properties and the font option.