代码之家  ›  专栏  ›  技术社区  ›  Canopus

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

  •  15
  • Canopus  · 技术社区  · 17 年前

    6 回复  |  直到 17 年前
        1
  •  8
  •   Matthew Xavier    17 年前

        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

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

        2
  •  12
  •   Christopher Janzon    13 年前

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

    WM_SETFONT :

    1. 如果你的窗口类有任何子窗口 WM_SETFONT 处理程序应将消息转发给每个人。
    2. WM_SETFONT 处理程序,并将其选择到绘制窗口时使用的DC中。
    3. WM_SETFONT 消息。

    WM_SETFONT

        3
  •  6
  •   Péa    15 年前

    HFONT defaultFont;
    defaultFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
    SendMessage(handlerControl, WM_SETFONT, WPARAM (defaultFont), TRUE); // Send this to each control
    
        4
  •  4
  •   Alan    17 年前

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

    SendMessageToDescendants( WM_SETFONT, 
                              (WPARAM)m_fntDialogFont.GetSafeHandle(), 
                              0 ); 
    
        5
  •  1
  •   Roel    17 年前

        6
  •  -1
  •   Nick Dandoulakis    17 年前

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