我正在尝试使用 PerMonitorV2 DPI 感知,它会在 DPI 更改时调整非客户端区域的大小。 MSDN 文档建议使用 list 来设置 DPI 感知模式: Setting the default DPI awareness for a process .
VS 配置属性的 list 工具部分仅提供三个 DPI 感知选项:无(不感知)、高 DPI 感知和每显示器 DPI 感知 (这似乎是 PerMonitorV1),所以我需要找到某种方法来覆盖这些 DPI 设置,但我不知道该怎么做。 (我最好的猜测是以某种方式提供我自己的 list 文件,而不是依赖 Visual Studio 生成 list 文件。)
最佳答案
在 list 工具设置中,您可以定义一个附加 list 片段,Visual Studio 将其与默认 list 片段合并。默认 list 仍将提供 <dpiAware>
标记,作为不理解 <dpiAwareness>
的旧版本操作系统的后备。标签。
步骤:
- 打开项目配置,选择“ list 工具”>“输入和输出”。
在“其他 list 文件”字段中,输入要包含的 list 片段的文件名。该路径是相对于您的项目文件夹的。
代码片段如下所示。请注意,我删除了
<dpiAware>
标签来自MSDN sample :<?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 项目的合并 list 。它嵌入在应用程序的资源中。
<?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>
来自 list 片段。
关于winapi - 如何使用我自己的 list 文件并将其嵌入到使用 Visual Studio 2017 的可执行文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52373528/