首页 > 后端开发 > C++ > 为什么我的DPI-Unaware应用程序在更新后突然变得DPI意见?

为什么我的DPI-Unaware应用程序在更新后突然变得DPI意见?

Patricia Arquette
发布: 2025-01-28 08:56:10
原创
755 人浏览过

Why Does My DPI-Unaware Application Suddenly Become DPI-Aware After an Update?

应用程序更新后,

> 意外意识会发生变化

>

最初设计为DPi-Unaware(依赖Windows的UI缩放)的某些应用程序,可能会意外地成为DPI-Weaw(系统意识)之后的次要更新。 即使应用程序表现出来和外部依赖性保持不变,也会发生这种情况。

> 根本原因:

>

这种行为通常是由DPI意识到的第三方组件或依赖项引起的。 即使在应用清单中有明确的DPI-Unaware声明,此类组件的包含也可以覆盖设置,迫使DPI-ISESTEMESS。

用于定义DPI意识的解决方案

>

几种方法可以明确控制应用程序的DPI意识:>

1。修改应用程序清单:

    修改
  • 包括(或不点击): app.manifest
<code class="language-xml"><dpiaware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiaware></code>
登录后复制
2。利用Windows API函数:

适当的API调用取决于Windows版本:>

Windows 7:
  • > Windows 8.1:
>
<code class="language-csharp">[DllImport("user32.dll", SetLastError = true)]
static extern bool SetProcessDPIAware();</code>
登录后复制
  • > Windows 10(1703及以后):
  • >
<code class="language-csharp">[DllImport("shcore.dll")]
static extern int SetProcessDpiAwareness(ProcessDPIAwareness value);

enum ProcessDPIAwareness
{
    DPI_Unaware = 0,
    System_DPI_Aware = 1,
    Per_Monitor_DPI_Aware = 2
}</code>
登录后复制
  • 3。使用
>基于组件参考的覆盖系统定义的dpi意识添加此属性:
<code class="language-csharp">[DllImport("user32.dll", SetLastError = true)]
static extern int SetProcessDpiAwarenessContext(DpiAwarenessContext value);

enum DpiAwarenessContext
{
    Context_Unaware = (DPI_AWARENESS_CONTEXT)-1,
    Context_SystemAware = (DPI_AWARENESS_CONTEXT)-2,
    Context_PerMonitorAware = (DPI_AWARENESS_CONTEXT)-3,
    Context_PerMonitorAwareV2 = (DPI_AWARENESS_CONTEXT)-4
}</code>
登录后复制

AssemblyInfo.cs重要的考虑因素:

DPI意识是特定于线程的。 使用特定于线程的API函数来控制各个线程。

>

确保所有第三方组件和依赖项与所需的DPI意识水平一致。
<code class="language-csharp">[assembly: System.Windows.Media.DisableDpiAwareness]</code>
登录后复制

以上是为什么我的DPI-Unaware应用程序在更新后突然变得DPI意见?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板