我有一个MFC应用程序,它具有默认的MFC DPI支持:它具有高DPI感知能力,但不支持每个监视器DPI。 Windows 10版本1703添加了对System (enhanced) DPI scaling的支持。我在.exe兼容性设置中从Windows资源管理器启用了此模式,它适用于我的应用程序。
理想情况下,我会让应用完全符合多显示器DPI标准,但这需要相当多的工作量。所以相反,我想告诉操作系统为我的应用程序使用系统(增强型)DPI扩展,如果操作系统支持它。
应用程序的清单是否启用了此功能,如果是,需要添加或更改哪些内容?
此外,如何修改清单?目前,我使用默认的Visual Studio 2017 MFC项目结构,该项目结构在我的项目中没有清单文件。相反,清单的内容被指定为项目属性,清单是使用mt.exe生成的。我可以使用mt.exe注入更改吗?如果我需要用自定义清单替换清单,那么最简单的方法是什么?
答案 0 :(得分:8)
将gdiScaling设置添加到应用程序的清单中,告诉Windows在所有监视器上应用GDI缩放。
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>
GdiScaling.manifest
。这会将您的GDI扩展设置合并到生成的清单的其余部分。当你构建时,你会收到关于微软没有采取行动的警告,但你已经知道了。 :-)警告的确切文字是:
GdiScaling.manifest:清单创作警告81010002:命名空间“http://schemas.microsoft.com/SMI/2017/WindowsSettings”中无法识别的元素“gdiScaling”。
幸运的是,无论如何,Windows都不关心并识别设置。