我希望我的应用程序中的所有控件(编辑,列表控件等)都具有相同的字体,而不是系统默认值。我该怎么做呢?是否有任何Win32 API设置应用程序默认字体?
答案 0 :(得分:13)
实施这个:
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
。
答案 1 :(得分:8)
Windows不为应用程序范围的字体提供任何机制。每个窗口类可能有自己的行为,用于选择默认使用的字体。它可能会尝试选择Windows shell对话框使用的字体,或者它可能只是使用自动选择到新DC中的可怕位图“system”字体来绘制文本。
Windows公共控制窗口类都响应WM_SETFONT
,这是用于告诉窗口您希望它使用哪种字体的标准窗口消息。当您实现自己的窗口类(尤其是新的子控件窗口类)时,您还应该为WM_SETFONT
编写处理程序:
WM_SETFONT
处理程序应该将消息转发给每个窗口。WM_SETFONT
处理程序中,并将其选择到绘制窗口时使用的DC中。WM_SETFONT
消息。请注意,对话管理器会为您执行此操作;在实例化对话框模板时,新对话框的字体将设置为模板中指定的字体,对话框将发送WM_SETFONT
所有子控件。
答案 2 :(得分:6)
是的,你可以!
HFONT defaultFont;
defaultFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
SendMessage(handlerControl, WM_SETFONT, WPARAM (defaultFont), TRUE); // Send this to each control
答案 3 :(得分:4)
在一次通话中为所有子窗口设置字体的便捷方法:
SendMessageToDescendants( WM_SETFONT,
(WPARAM)m_fntDialogFont.GetSafeHandle(),
0 );
答案 4 :(得分:1)
您不能,同时无法对所有控件执行此操作。您需要通过资源编辑器设置它,如前所述,或者在每个控件上手动调用SetFont()。
答案 5 :(得分:-1)
您可以通过资源视图为每个对话框设置字体。右键单击对话框(不在其他控件上),选择属性和字体选项。