如何为 Win32 应用程序中的所有窗口设置默认字体?

发布于 2024-07-21 21:28:43 字数 88 浏览 9 评论 0原文

我希望应用程序中的所有控件(编辑、列表控件等)都具有相同的字体,这不是系统默认值。 我该怎么做呢? 是否有任何 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

农村范ル 2024-07-28 21:28:43

实现这一点:

    bool CALLBACK SetFont(HWND child, LPARAM font){
        SendMessage(child, WM_SETFONT, font, true);
        return true;
    }

在一个单独的文件中或在 main.cpp 中,然后运行:

EnumChildWindows(hwnd, (WNDENUMPROC)SetFont, (LPARAM)GetStockObject(DEFAULT_GUI_FONT));

只要您愿意,例如在创建所有子窗口之后的 WM_CREATE 消息中!

我的 win32 GUI 应用程序解决方案中始终有一个 SetFont.cpp 和一个 SetFont.h

Implement this:

    bool CALLBACK SetFont(HWND child, LPARAM font){
        SendMessage(child, WM_SETFONT, font, true);
        return true;
    }

inside a separate file or just in the main.cpp and then just run:

EnumChildWindows(hwnd, (WNDENUMPROC)SetFont, (LPARAM)GetStockObject(DEFAULT_GUI_FONT));

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 a SetFont.h in my win32 GUI application solutions.

债姬 2024-07-28 21:28:43

Windows 不提供任何应用程序范围字体的机制。 每个窗口类可能有自己的行为来选择默认使用的字体。 它可能会尝试选择 Windows shell 对话框使用的字体,或者可能只是使用自动选择到新 DC 中的可怕的位图“系统”字体来绘制文本。

Windows 公共控制窗口类均响应 WM_SETFONT< /code>,这是标准窗口消息,用于告诉窗口您希望它使用什么字体。 当您实现自己的窗口类(尤其是新的子控件窗口类)时,您还应该为 WM_SETFONT 编写一个处理程序:

  1. 如果您的窗口类有任何子窗口,您的 WM_SETFONT处理程序应该将消息转发给他们每个人。
  2. 如果您的窗口类执行任何自定义绘制,请确保将您收到的 HFONT 保存在 WM_SETFONT 处理程序中,并将其选择到您在绘制窗口时使用的 DC 中。
  3. 如果您的窗口类用作顶级窗口,则它将需要逻辑来选择自己的字体,因为它将没有父窗口向其发送 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 for WM_SETFONT:

  1. If your window class has any child windows, your WM_SETFONT handler should forward the message to each of them.
  2. If your window class does any custom drawing, make sure to save the HFONT you receive in your WM_SETFONT handler and select it into the DC you use when drawing your window.
  3. If your window class is used as a top-level window, it will need logic to choose its own font, since it will have no parent window to send it a 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.

树深时见影 2024-07-28 21:28:43

是的你可以 !

HFONT defaultFont;
defaultFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
SendMessage(handlerControl, WM_SETFONT, WPARAM (defaultFont), TRUE); // Send this to each control

Yes you can !

HFONT defaultFont;
defaultFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
SendMessage(handlerControl, WM_SETFONT, WPARAM (defaultFont), TRUE); // Send this to each control
私野 2024-07-28 21:28:43

一种在一次调用中设置所有子窗口字体的便捷方法:

SendMessageToDescendants( WM_SETFONT, 
                          (WPARAM)m_fntDialogFont.GetSafeHandle(), 
                          0 ); 

A handy method for setting the font for all child windows in one call:

SendMessageToDescendants( WM_SETFONT, 
                          (WPARAM)m_fntDialogFont.GetSafeHandle(), 
                          0 ); 
£噩梦荏苒 2024-07-28 21:28:43

你不能,没有办法同时对所有控件执行此操作。 您需要通过资源编辑器进行设置,如之前所建议的那样,或者在每个控件上手动调用 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.

你又不是我 2024-07-28 21:28:43

您可以通过资源视图设置每个对话框的字体。 右键单击对话框(而不是其他控件),选择属性和字体选项。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文