首頁 > 後端開發 > 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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板