使用VS2017增强系统DPI缩放

时间:2017-09-26 13:59:31

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

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

理想情况下,我会让应用完全符合多显示器DPI标准,但这需要相当多的工作量。所以相反,我想告诉操作系统为我的应用程序使用系统(增强型)DPI扩展,如果操作系统支持它。

应用程序的清单是否启用了此功能,如果是,需要添加或更改哪些内容?

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

1 个答案:

答案 0 :(得分:8)

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

  1. 在项目中创建新文件GdiScaling.manifest
  2. <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扩展设置合并到生成的清单的其余部分。
    2. 当你构建时,你会收到关于微软没有采取行动的警告,但你已经知道了。 :-)警告的确切文字是:

        

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

      幸运的是,无论如何,Windows都不关心并识别设置。