【问题标题】:How to scale font sizes based on current DPI settings in VC++/MFC applications?如何根据 VC++/MFC 应用程序中的当前 DPI 设置缩放字体大小?
【发布时间】:2011-07-25 05:06:21
【问题描述】:

如何根据当前 VC++/MFC 应用程序中的 DPI 设置来缩放字体大小?

到目前为止,当我将 DPI 从 100% 到 150% 更改时,字体大小保持不变,尽管图标会根据当前 dpi 缩小 ..

请提出解决上述问题的最佳方法。

【问题讨论】:

    标签: c++ visual-c++ mfc dpi


    【解决方案1】:

    在 Windows Vista 和 7 中,操作系统会尝试从您的程序中隐藏 DPI,并在后台进行调整。如果您希望您的程序正确响应 DPI 更改,您必须遵循 Microsoft 的标题为 Creating a DPI-Aware Application 的指南。

    【讨论】:

    • 这很有趣 - 这是否意味着从/到 DLU 的转换现在完全不在窗口中了?应该如何编写一个可以在 XP 和 Vista/7 上运行的应用程序?
    • @Roel,如果您想要一个在 XP 和 Vista/7 之间运行相同的应用程序,只需查找 SetProcessDPIAware 函数的地址,如果找到就调用它。
    • @Roel,我认为微软这样做是因为当您更改 DPI 时,他们发现太多应用程序在 XP 上无法正常运行。对于那些不想努力做正确的事情的人来说,这让他们的生活更轻松。我不确定 DLU 具体是如何受到影响的。
    • 好的,谢谢 - 我认为我对细节的了解不够,无法对新方法的优点发表意见。从我粗略的阅读来看,似乎必须在 WinXP 上进行 DLU 杂耍,并按照您链接到的文章在 Vista/7 上描述的方式进行操作,有效地使工作量翻倍,但我想我错了假设。坦率地说,如果我永远不必调查这方面的细节,我会是一个快乐的人;)
    【解决方案2】:

    通过指定 DLU 中的文本和控件大小。但是默认情况下会发生这种情况,因此我假设您是动态生成对话框或从基于内存的 DLGTEMPLATE 生成对话框。如果你,你(请原谅我的法语)搞砸了,因为你将不得不将 DLU 转换为像素,这是一个非常痛苦和乏味的过程。阅读以下知识库文章:

    【讨论】:

      【解决方案3】:

      不要使用 DPI 进行字体缩放。相反,请使用用户在控制面板的“外观”部分中配置的设置。

      您可能还想考虑为您的应用程序配置字体大小。

      【讨论】:

      • 使字体大小可配置............如何在VC++应用程序中完成?
      • @Ashish:Windows notepad.exe 就是一个很好的例子,选择格式菜单 -> 字体。
      猜你喜欢
      • 1970-01-01
      • 2013-12-26
      • 2019-10-13
      • 2013-01-13
      • 2016-09-14
      • 2023-03-04
      • 2021-03-25
      • 1970-01-01
      • 2015-04-25
      相关资源
      最近更新 更多