首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Visual Studio中将Windows应用程序清单中的dpiAware属性设置为"per monitor“?

如何在Visual Studio中将Windows应用程序清单中的dpiAware属性设置为"per monitor“?
EN

Stack Overflow用户
提问于 2014-05-09 03:43:05
回答 3查看 22.3K关注 0票数 17

我需要能够将应用程序清单中的dpiAware属性设置为"per monitor“。属性中的可用选项仅用于启用或禁用DPI感知。这两个设置都不适合我。如果我不在exe中嵌入清单,那么我可以获得我想要的应用程序行为,然后手动编辑清单。我想自动生成并嵌入清单。我是不是漏掉了什么?(我正在使用Visual Studio 2013。)

EN

回答 3

Stack Overflow用户

发布于 2017-05-17 03:15:09

Windows10中的新特性是dpiAwareness以及dpiAware,因此我们需要对此示例进行一些更新。现在,这很好,因为如果dpiAwareness不存在,则设置将从dpiAware继承。

要完全启用DPI感知,请使用最新的系统支持(请参阅参考网址以了解其他可能的选项),其中包括“permonitor”和“system”,因为您的问题要求它,所以我将使用它们而不是“system”。

代码语言:javascript
复制
<asmv3:application>
  <asmv3:windowsSettings>
    <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/pm</dpiAware> <!-- legacy -->
    <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">permonitorv2,permonitor</dpiAwareness> <!-- falls back to pm if pmv2 is not available -->
  </asmv3:windowsSettings>
</asmv3:application>

禁用,您可以做相反的事情(不需要dpiAwareness,因为我们不支持它):

代码语言:javascript
复制
<asmv3:application>
  <asmv3:windowsSettings>
    <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">unaware</dpiAware>
  </asmv3:windowsSettings>
</asmv3:application>

如果你碰巧使用GDI对象来绘制你自己的东西,那么甚至还有'gdiScaling‘。

代码语言:javascript
复制
<asmv3:application>
  <asmv3:windowsSettings>
    <gdiScaling xmlns="http://schemas.microsoft.com/SMI/2017/WindowsSettings">true</gdiScaling>
  </asmv3:windowsSettings>
</asmv3:application>

参考:Microsoft on DPI Awareness as of latest Windows 10 build (也有关于如何让你的代码DPI感知的教程,即使它对于较大的项目来说有点乏味)

票数 20
EN

Stack Overflow用户

发布于 2014-11-11 06:22:20

这个清单是有效的,<dpiAware>True/PM</dpiAware>是最重要的部分:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>

  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
    </application>
  </compatibility>

  <asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
    <asmv3:windowsSettings
         xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>True/PM</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>

</asmv1:assembly>
票数 17
EN

Stack Overflow用户

发布于 2017-07-09 02:07:57

在Windows101607中引入了一个名为dpiAwareness的新属性。它允许选择备用DPI缩放选项并覆盖dpiAware属性(如果存在)。为了获得最好的兼容性,应该同时指定这两个级别,并确保您的应用程序可以使用所有DPI感知级别。

以下清单在Windows10 1607+上启用每个监视器的DPI感知版本2,并在Windows 7+上启用系统DPI感知:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
    <assemblyIdentity type="win32" name="MyApplication" version="1.0.0.0" processorArchitecture="amd64"/>

    <asmv3:application>
        <asmv3:windowsSettings>
            <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/pm</dpiAware> <!-- fallback for Windows 7 and 8 -->
            <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness> <!-- adding v1 as fallback would result in v2 not being applied to dialogs on capable systems -->
            <gdiScaling xmlns="http://schemas.microsoft.com/SMI/2017/WindowsSettings">true</gdiScaling> <!-- enables GDI DPI scaling -->
        </asmv3:windowsSettings>
    </asmv3:application>
</assembly>

要禁用DPI感知,您可以不指定DPI感知(缺省值为unaware),也可以将dpiAware指定为false

还要注意gdiScaling属性,它是在Windows101607中添加的。如果设置为true,它将启用自动GDI缩放。如果你的应用程序使用GDI来绘制东西,这是非常有用的。

参考:

High-DPI scaling since Windows 10 1607

Writing DPI-aware applications

Application manifests

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23551112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档