微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我希望我的应用程序中的所有控件(编辑,列表控件等)具有相同的字体,而不是系统认的字体。 我该怎么做呢? 有没有设置应用程序认字体的任何Win32 API?

如何确定安装字体的O / S文件名?

为什么不FONTSIGNATURE反映lfCharSet?

Qt字体在不同的系统上有不同的大小

如何在Windows中获取所有等宽字体?

QFontDatabase :: addApplicationFont在embedded式Linux中工作,但不在Linux Ubuntu中工作

Windows不提供任何应用程序范围的字体的机制。 每个窗口类可能有其自己的行为来选择认使用的字体。 它可以尝试选择Windows外壳对话框使用的字体,或者可以使用自动选择到新DC中的可怕位图“系统”字体来绘制文本。

Windows公共控制窗口类都响应WM_SETFONT ,这是标准的窗口消息,用于告诉窗口你希望使用哪种字体。 当你实现你自己的窗口类(尤其是新的子控件窗口类)时,你还应该为WM_SETFONT编写一个处理程序:

如果你的窗口类有任何子窗口,你的WM_SETFONT处理程序应该将消息转发给它们中的每一个

如果您的窗口类进行任何自定义绘图,请确保将您收到的HFONT保存在您的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,WParaM (defaultFont),TRUE); // Send this to each control

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

SendMessagetoDescendants( WM_SETFONT,(WParaM)m_fntDialogFont.GetSafeHandle(),0 );

你不能,在同一时间没有办法为所有的控制。 您需要通过资源编辑器来设置它,或者在每个控件上手动调用SetFont()。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐