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

时间:2011-07-17 14:31:20

标签: c++ winapi fonts

  

可能重复:
  How to set default font for all the windows in a Win32 Application?
  Which Font is the default for MFC Dialog Controls?

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

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

2 个答案:

答案 0 :(得分:6)

一种方法是使用EnumChildWindows

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

EnumChildWindows(hwndParent, SetChildFont, (LPARAM)hFont);

答案 1 :(得分:2)

我在这里深入解释所有这些:Which Font is the default for MFC Dialog Controls?绝对需要阅读任何关心如何正确使用UI的Win32开发人员。

无法为整个应用程序设置字体。您可以做的最好的事情是设置父窗口的字体,并利用大多数控件将从其父级继承其字体的事实。为了更加确定这是否有效,您可以编写自己的简单SendMessageToChildren函数,就像MFC提供的那样,它只是递归地遍历特定父项的子项,并向它们发送WM_SETFONT消息。 / p>

WM_SETFONT确实是你唯一的选择。您无法为背景画笔设置整个类的字体。做到这一点可能具有挑战性,但我同意这是非常重要的尝试。不一致的UI和非专业应用程序的标志是不使用正确的默认GUI字体。通过将面部切换到Segoe UI,但默认大小为9磅,Windows Vista出现了更复杂的事情。