我希望我的应用程序中的所有控件(编辑框、列表框等)都具有相同的字体,而不是系统默认字体。我该怎么做?是否存在Win32 API可以设置应用程序默认字体?
实现这个:
bool CALLBACK SetFont(HWND child, LPARAM font){
SendMessage(child, WM_SETFONT, font, true);
return true;
}
在单独的文件中或者只是在主cpp文件中,然后运行:
EnumChildWindows(hwnd, (WNDENUMPROC)SetFont, (LPARAM)GetStockObject(DEFAULT_GUI_FONT));
无论何时需要,比如在创建完所有子窗口之后的WM_CREATE
消息中!
我在我的Win32 GUI应用程序解决方案中始终有一个SetFont.cpp
和SetFont.h
。
WM_SETFONT
,这是告诉窗口要使用什么字体的标准窗口消息。当您实现自己的窗口类(特别是新的子控件窗口类)时,您还应编写WM_SETFONT
的处理程序:
WM_SETFONT
处理程序应该将消息转发给每个子窗口。WM_SETFONT
处理程序中保存你收到的HFONT,并将其选择到你用于绘制窗口的DC中。WM_SETFONT
消息。请注意,对话框管理器会为你完成其中一些工作;在实例化对话框模板时,新对话框的字体设置为模板中命名的字体,并且对话框会向所有子控件发送WM_SETFONT
消息。
HFONT defaultFont;
defaultFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
SendMessage(handlerControl, WM_SETFONT, WPARAM (defaultFont), TRUE); // Send this to each control
一种方便的方法,可以通过一次调用来设置所有子窗口的字体:
SendMessageToDescendants( WM_SETFONT,
(WPARAM)m_fntDialogFont.GetSafeHandle(),
0 );
你无法一次性为所有控件设置字体,必须通过资源编辑器进行设置,或者手动在每个控件上调用SetFont()方法。
您可以通过资源视图为每个对话框设置字体。右键单击对话框(而不是其他控件),选择属性和字体选项。