我正在尝试使用PerMonitorV2 DPI感知,该感知将在更改DPI时调整非客户区的大小。 MSDN文档建议使用清单设置DPI感知模式: Setting the default DPI awareness for a process。
VS配置属性的清单工具部分仅提供了三个DPI意识选项:无(不知道),高度DPI意识和每个监视器DPI意识< / strong>(似乎是PerMonitorV1),所以我需要找到某种方法来覆盖那些DPI设置,但是我不知道该怎么做。 (我最好的猜测是以某种方式提供我自己的清单文件,而不是依靠Visual Studio生成清单文件。)
答案 0 :(得分:3)
在清单工具设置中,您可以定义其他清单清单,Visual Studio将与默认清单合并。默认清单仍将提供<dpiAware>
标签,以作为不了解<dpiAwareness>
标签的旧版OS的后备。
步骤:
在“其他清单文件”字段中,输入要包括的清单片段的文件名。该路径是相对于您的项目文件夹的。
代码段如下所示。请注意,我从MSDN sample中删除了<dpiAware>
标记:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
</windowsSettings>
</application>
</assembly>
从“ DPI意识”组合框中选择“高DPI意识”。如上所述,这是旧版Windows的后备值。
结果:
这是我使用应用程序向导创建的Win32项目的合并清单。它嵌入在应用程序的资源中。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
</windowsSettings>
</application>
</assembly>
如果您获得两个<dpiAware>
标签,则忘记从清单片段中删除<dpiAware>
。