Heim > Backend-Entwicklung > C++ > Warum wird meine DPI-Bewusstseinsanwendung nach einem Update plötzlich DPI-bewusst?

Warum wird meine DPI-Bewusstseinsanwendung nach einem Update plötzlich DPI-bewusst?

Patricia Arquette
Freigeben: 2025-01-28 08:56:10
Original
755 Leute haben es durchsucht

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

Unerwartete Änderungen des DPI -Bewusstseins nach Anwendungsaktualisierungen

Einige Anwendungen, die ursprünglich als DPI-Beobachtung konzipiert sind (die sich auf Windows 'UI-Skalierung verlassen), können nach geringfügigen Aktualisierungen unerwartet zu DPI-bewusstes DPI-bewusstes (Systembewusstsein) werden. Dies geschieht auch dann, wenn die Anwendungsmanifest- und externe Abhängigkeiten unverändert bleiben.

Grundursache:

Dieses Verhalten wird häufig durch DPI-bewusstes Drittanbieterkomponenten oder Abhängigkeiten verursacht. Selbst mit einer expliziten DPI-Bekanntmachungserklärung in das Anwendungsmanifest kann die Einbeziehung solcher Komponenten die Einstellung überschreiben, was die DPII-Wahrnehmung erzwingt.

Lösungen zur Definition von DPI -Bewusstsein:

Mehrere Ansätze können das DPI -Bewusstsein einer Anwendung explizit steuern:

1. Ändern des Anwendungsmanifests:

  • modifizieren app.manifest
<code class="language-xml"><dpiaware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiaware></code>
Nach dem Login kopieren
2. Verwendung von Windows -API -Funktionen:

Der entsprechende API -Aufruf hängt von der Windows -Version ab:

    Windows 7:
<code class="language-csharp">[DllImport("user32.dll", SetLastError = true)]
static extern bool SetProcessDPIAware();</code>
Nach dem Login kopieren
    Windows 8.1:
<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>
Nach dem Login kopieren
    Windows 10 (1703 und später):
<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>
Nach dem Login kopieren
3. Verwenden von

: AssemblyInfo.cs Fügen Sie dieses Attribut hinzu, um das systemdefinierte DPI-Bewusstsein basierend auf Komponentenreferenzen zu überschreiben:

<code class="language-csharp">[assembly: System.Windows.Media.DisableDpiAwareness]</code>
Nach dem Login kopieren
Wichtige Überlegungen:

DPI-Bewusstsein ist threadspezifisch. Verwenden Sie threadspezifische API-Funktionen für die körnige Kontrolle über einzelne Threads.
  • Stellen Sie sicher, dass alle Komponenten und Abhängigkeiten von Drittanbietern mit der gewünschten DPI-Bewusstseinsniveau übereinstimmen.

Das obige ist der detaillierte Inhalt vonWarum wird meine DPI-Bewusstseinsanwendung nach einem Update plötzlich DPI-bewusst?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage