winapi - 如何使用我自己的 list 文件并将其嵌入到使用 Visual Studio 2017 的可执行文件中?

标签 winapi visual-studio-2017 manifest dpi-aware

我正在尝试使用 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> 的旧版本操作系统的后备。标签。

步骤:

  1. 打开项目配置,选择“ list 工具”>“输入和输出”。
  2. 在“其他 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>
    
  3. 从“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/

相关文章:

c++ - 是否可以从覆盖(非事件)窗口获取 pixelcolor(x,y)?

C++ Builder/Winapi 不同的加载/进度条类型

visual-studio - Resharper 安装未检测到 VS 2017

java - Java list 文件中行的顺序

c++ - CreateThread 的保留和提交参数之间有什么区别?

c# - Npgsql Entityframework - 看不到 ADO.net 实体数据模型的 Postgres 提供程序

asp.net-core - .NET Core 控制台应用程序未创建 EXE 文件

java - 从另一个包启动 Activity - 问题

ssl - 手动运行后 puppet 代理坏了

delphi - 如何混合 Windows 对话框和 VCL 表单?