Winapi 系统默认对话框字体?

Winapi 系统默认对话框字体?,winapi,fonts,atl,wtl,Winapi,Fonts,Atl,Wtl,Windows中的默认对话框字体为MS Shell Dlg 我不喜欢它,因为它不正确 手动更改单个对话框项的字体很容易,但是如何显示一个对话框,在调用(或使用ATL/WTL)时,默认情况下,将“正确”的系统字体()应用于其所有控件 注: 我之所以多次说“不手动”,是因为我正在寻找一种比使用EnumChildWindows(或类似工具)循环浏览所有内容更好的解决方案。有吗?来自: 系统字体在不同版本的Windows之间可能有所不同。到 让您的应用程序使用系统字体,无论它是哪个系统 在上运行时,使

Windows中的默认对话框字体为MS Shell Dlg

我不喜欢它,因为它不正确

手动更改单个对话框项的字体很容易,但是如何显示一个对话框,在调用(或使用ATL/WTL)时,默认情况下,将“正确”的系统字体()应用于其所有控件

注: 我之所以多次说“不手动”,是因为我正在寻找一种比使用
EnumChildWindows
(或类似工具)循环浏览所有内容更好的解决方案。有吗?

来自:

系统字体在不同版本的Windows之间可能有所不同。到 让您的应用程序使用系统字体,无论它是哪个系统 在上运行时,使用带有MS Shell Dlg字体的DS_SHELLFONT,并使用 DIALOGEX资源,而不是DIALOG资源。系统映射 此字体使对话框使用Tahoma字体。注 如果字体不是MS Shell Dlg,则DS_SHELLFONT无效


我想这就是你想要的。如果这不起作用,那么我想您必须在将其传递到DialogBox之前启用它。

我认为您需要在清单中启用视觉样式。你做到了吗?@jeffamaphone:是的,我做到了。这与此无关,原因在于对话框资源中嵌入的文本
msshell Dlg
。我只是没有一个在运行时更改对话框的优雅解决方案。由于您是从资源文件中的模板加载对话框,您是否考虑过只更改模板?你可以在
开始之前说
FONT 8,“这里是你想要的字体”
@jeffamaphone:在编译时我怎么知道用户的字体?好的,我想我现在明白了。看下面的答案。不,因为某些原因,这不起作用;我已经试过了。手动加载资源似乎很痛苦,而且似乎是一种错误的方式(特别是因为它不适合ATL/WTL设计,尽管我可以绕过它)。。。真的没有更好的方法吗?有个家伙建议用MFC的方法来做这件事:还有MFC CWindow::SendMessageToDescents:这些都是我能找到的方法。这并不意味着没有办法,但应该是自动的。您是否有正确样式的按钮(即,您确定清单内容正确吗)?哇哦。。。Microsoft在内部使用此文件而不是对其进行文档记录方面做得很好!!:(我以前从未见过,似乎MFC方式就是用来完成这项任务的。非常感谢链接,这真的很有帮助(即使我使用ATL)!+1(是的,我有很好的按钮和所有东西,清单内容是正确的。:P)您如何知道您的对话框与未知字体的度量兼容?如果用户字体的度量导致模板生成带有截断文本的对话框,该怎么办?还要注意,消息框字体与系统对话框字体不同。听起来您希望对话框使用消息框字体,这意味着它看起来与系统中的所有其他对话框不同。