如何在win-api中设置整个应用程序的字体

How to set the font of the entire application in win api?

本文关键字:应用程序 字体 设置 win-api      更新时间:2023-10-16

可能的重复:
如何为Win32应用程序中的所有窗口设置默认字体
MFC对话框控件的默认字体是哪种?

我讨厌默认的Windows Api Window字体(我认为这是默认的系统字体(。我知道如何更改单个孩子的字体,比如按钮。但是,难道没有办法更改整个应用程序的字体,这样我就不必在程序中的每个小部件上使用SendMessage(…WM_SETFONT(吗?

欢迎使用代码示例。(我使用C++(

一种方法是使用EnumChildWindows:

BOOL CALLBACK SetChildFont(HWND hwndChild, LPARAM lParam)
{
    HFONT hFont = (HFONT)lParam;
    SendMessage(hwndChild, WM_SETFONT, (WPARAM)hFont, TRUE);
}
EnumChildWindows(hwndParent, SetChildFont, (LPARAM)hFont);

我在这里详细解释了所有这些:MFC对话框控件的默认字体是哪种?对于任何关心正确使用UI的Win32开发人员来说,这绝对是必读之作。

无法为整个应用程序设置字体。您能做的最好的事情是为父窗口设置字体,并利用大多数控件将从其父窗口继承其字体这一事实。为了确保这一点,您可以像MFC提供的那样编写自己的简单SendMessageToChildren函数,该函数只需递归地遍历特定父级的子级,并向每个子级发送WM_SETFONT消息。

WM_SETFONT实际上是您唯一的选择。不能像设置背景笔刷那样为整个类设置字体。做好这件事可能很有挑战性,但我同意这是一个非常重要的尝试。不一致的UI和不专业的应用程序的标志是不使用正确的默认GUI字体。Windows Vista出现了,不仅将人脸切换为Segoe UI,还将默认大小切换为9点,使事情变得更加复杂。