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

Can*_*pus 12 windows winapi fonts mfc

我希望我的应用程序中的所有控件(编辑,列表控件等)具有相同的字体,而不是系统默认值.我该怎么做呢?是否有任何Win32 API设置应用程序默认字体?

Chr*_*zon 14

实现这个:

    bool CALLBACK SetFont(HWND child, LPARAM font){
        SendMessage(child, WM_SETFONT, font, true);
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

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

EnumChildWindows(hwnd, (WNDENUMPROC)SetFont, (LPARAM)GetStockObject(DEFAULT_GUI_FONT));
Run Code Online (Sandbox Code Playgroud)

WM_CREATE您可以随时创建所有子窗口,例如在消息中!

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


Mat*_*ier 8

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

Windows公共控件窗口类都响应WM_SETFONT,这是用于告诉窗口您希望它使用哪种字体的标准窗口消息.当您实现自己的窗口类(尤其是新的子控件窗口类)时,您还应该为WM_SETFONT以下内容编写处理程序:

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

请注意,对话管理器会为您执行此操作; 在实例化对话框模板时,新对话框的字体设置为模板中指定的字体,对话框将发送WM_SETFONT其所有子控件.


小智 6

是的你可以 !

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