【问题标题】:Enhanced system DPI scaling with VS2017使用 VS2017 增强系统 DPI 缩放
【发布时间】:2018-03-07 19:10:09
【问题描述】:

我有一个具有默认 MFC DPI 支持的 MFC 应用程序:它支持高 DPI,但不支持每个显示器的 DPI。 Windows 10 版本 1703 添加了对 System (enhanced) DPI scaling 的支持。我从 Windows 资源管理器的 .exe 兼容性设置中启用了此模式,它适用于我的应用。

理想情况下,我会让应用完全符合多显示器 DPI 的要求,但这是一项相当大的工作量。因此,如果操作系统支持,我想告诉操作系统为我的应用程序使用系统(增强)DPI 缩放。

应用程序的清单是否启用此功能,如果启用,需要添加或更改什么?

另外,如何修改清单?目前,我正在使用默认的 Visual Studio 2017 MFC 项目结构,该结构在我的项目中没有清单文件。相反,清单的内容被指定为项目属性,并使用mt.exe 生成清单。我可以用 mt.exe 注入更改吗?如果我需要用自定义清单替换清单,最简单的方法是什么?

【问题讨论】:

  • 是的,您可以enable that setting through your manifest(该示例位于该文章末尾附近)。
  • 看来我需要asmv3:applicationasmv3:windowsSettingsgdiScaling 元素。我可以通过 mt.exe 自动生成方法将这些作为增量更改添加,还是需要手动显式声明整个清单?
  • 您可以通过项目设置 > 清单工具 > 附加清单文件将其添加为增量更改。在那里定义的文件与自动生成的文件“合并”。

标签: windows mfc visual-studio-2017 manifest dpi


【解决方案1】:

gdiScaling 设置添加到应用程序的清单中,以告知 Windows 在所有监视器上应用 GDI 缩放。

  1. 在您的项目中创建一个新文件GdiScaling.manifest
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"  xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" manifestVersion="1.0">
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2017/WindowsSettings">
      <gdiScaling>true</gdiScaling>
    </asmv3:windowsSettings>
  </asmv3:application>
</assembly>
  1. 在项目设置中,在 Manifest Tool 中,将 Additional Manifest Files 设置为 GdiScaling.manifest。这会将您的 GDI 缩放设置合并到生成的清单的其余部分。

当您构建时,您会收到关于 Microsoft 没有采取行动的警告,但您已经知道这一点。 :-) 警告的确切文本是这样的:

GdiScaling.manifest:清单创作警告 81010002:命名空间“http://schemas.microsoft.com/SMI/2017/WindowsSettings”中无法识别的元素“gdiScaling”。

幸运的是,Windows 并不关心并识别设置。

【讨论】:

    猜你喜欢
    • 2019-08-12
    • 2014-06-18
    • 2011-01-12
    • 2015-01-23
    • 2021-12-15
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多