Maison > développement back-end > C++ > Pourquoi mon application DPI-UNAWARE devient-elle soudainement DPI-AWARE après une mise à jour?

Pourquoi mon application DPI-UNAWARE devient-elle soudainement DPI-AWARE après une mise à jour?

Patricia Arquette
Libérer: 2025-01-28 08:56:10
original
755 Les gens l'ont consulté

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

Modifications inattendues de sensibilisation au DPI après les mises à jour de l'application

Certaines applications, conçues à l'origine comme DPI-UNAWARE (en s'appuyant sur la mise à l'échelle de l'interface utilisateur de Windows), peuvent devenir inattendues DPI-AWARE (System Aware) après des mises à jour mineures. Cela se produit même si la manifeste de l'application et les dépendances externes restent inchangées.

Cause profonde:

Ce comportement est souvent causé par des composants ou des dépendances tiers Aware Aware. Même avec une déclaration explicite DPI-UNAWARE dans le manifeste de l'application, l'inclusion de ces composants peut remplacer le paramètre, forçant la conscience de la DPI.

Solutions pour définir la sensibilisation au DPI:

Plusieurs approches peuvent contrôler explicitement la sensibilisation au DPI d'une application:

1. Modification du manifeste des applications:

  • Modifier app.manifest pour inclure (ou décomancement) ce qui suit:
<code class="language-xml"><dpiaware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiaware></code>
Copier après la connexion

2. Utilisation des fonctions de l'API Windows:

L'appel API approprié dépend de la version Windows:

  • Windows 7:
<code class="language-csharp">[DllImport("user32.dll", SetLastError = true)]
static extern bool SetProcessDPIAware();</code>
Copier après la connexion
  • 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>
Copier après la connexion
  • Windows 10 (1703 et plus tard):
<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>
Copier après la connexion

3. En utilisant AssemblyInfo.cs:

Ajoutez cet attribut pour remplacer la conscience DPI définie par le système basé sur les références de composants:

<code class="language-csharp">[assembly: System.Windows.Media.DisableDpiAwareness]</code>
Copier après la connexion

Considérations importantes:

  • La conscience du DPI est spécifique au fil. Utilisez des fonctions d'API spécifiques au thread pour le contrôle granulaire sur les threads individuels.
  • Assurez-vous que tous les composants et dépendances tiers sont cohérents avec le niveau de sensibilisation au DPI souhaité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal