我希望我的应用程序中的所有控件(编辑,列表控件等)具有相同的字体,而不是系统默认的字体。 我该怎么做呢? 有没有设置应用程序默认字体的任何Win32 API?
Windows不提供任何应用程序范围的字体的机制。 每个窗口类可能有其自己的行为来选择默认使用的字体。 它可以尝试选择Windows外壳对话框使用的字体,或者可以使用自动选择到新DC中的可怕位图“系统”字体来绘制文本。
Windows公共控制窗口类都响应WM_SETFONT
,这是标准的窗口消息,用于告诉窗口你希望使用哪种字体。 当你实现你自己的窗口类(尤其是新的子控件窗口类)时,你还应该为WM_SETFONT
编写一个处理程序:
WM_SETFONT
处理程序应该将消息转发给它们中的每一个。 WM_SETFONT
处理程序中,并将其选择到绘制窗口时使用的DC中。 WM_SETFONT
消息。 请注意,对话管理器为你做了一些这样的事情; 当实例化对话框模板时,新对话框的字体被设置为在模板中命名的字体,并且对话框发送WM_SETFONT
所有子控件。
实现这个:
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
。
是的你可以 !
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()。
您可以通过资源视图为每个对话框设置字体。 右键单击一个对话框(不在其他控件上),选择属性和字体选项。