Partager via


Mise à l’échelle automatique (Windows Forms .NET)

La mise à l’échelle automatique permet à un formulaire et à ses contrôles, conçus sur un ordinateur avec une certaine résolution ou police d’affichage, d’être affichés de manière appropriée sur un autre ordinateur avec une autre résolution d’affichage ou une police différente. Il garantit que le formulaire et ses contrôles seront redimensionnés intelligemment pour être cohérents avec les fenêtres natives et d’autres applications sur les machines des utilisateurs et d’autres développeurs. La mise à l’échelle automatique et les styles visuels permettent aux applications Windows Forms de maintenir une apparence cohérente par rapport aux applications Windows natives sur l’ordinateur de chaque utilisateur.

Dans la plupart des cas, la mise à l’échelle automatique fonctionne comme prévu dans Windows Forms. Toutefois, les modifications apportées au schéma de police peuvent être problématiques.

Besoin de mise à l’échelle automatique

Sans mise à l’échelle automatique, une application conçue pour une résolution d’affichage ou une police apparaît trop petite ou trop grande lorsque cette résolution ou cette police est modifiée. Par exemple, si l’application est conçue à l’aide de Tahoma 9 point comme base de référence, sans ajustement, elle apparaît trop petite si elle est exécutée sur un ordinateur où la police système est Tahoma 12 point. Les éléments de texte, tels que les titres, les menus, le contenu de la zone de texte, et ainsi de suite s’affichent plus petits que d’autres applications. En outre, la taille des éléments d’interface utilisateur qui contiennent du texte, tels que la barre de titre, les menus et de nombreux contrôles dépendent de la police utilisée. Dans cet exemple, ces éléments apparaissent également relativement plus petits.

Une situation analogue se produit lorsqu’une application est conçue pour une certaine résolution d’affichage. La résolution d'affichage la plus courante est de 96 points par pouce (PPP), ce qui équivaut à un facteur de mise à l'échelle de 100%. Cependant, les écrans à résolution plus élevée, prenant en charge des facteurs de mise à l'échelle de 125%, 150%, 200% (équi valent respectivement à 120, 144 et 192 PPP) et au-delà, deviennent de plus en plus courants. Sans ajustement, une application, en particulier une application basée sur des graphiques, conçue pour une résolution apparaît trop grande ou trop petite lors de l’exécution à une autre résolution.

La mise à l’échelle automatique cherche à résoudre ces problèmes en redimensionnant automatiquement le formulaire et ses contrôles enfants en fonction de la taille de police relative ou de la résolution d’affichage. Le système d’exploitation Windows prend en charge la mise à l’échelle automatique des boîtes de dialogue à l’aide d’une unité relative de mesures appelée unités de dialogue. Une unité de dialogue est basée sur la police système et sa relation avec les pixels peut être déterminée par la fonction SDK Win32 GetDialogBaseUnits. Lorsqu’un utilisateur modifie le thème utilisé par Windows, toutes les boîtes de dialogue sont automatiquement ajustées en conséquence. De plus, Windows Forms prend en charge la mise à l’échelle automatique en fonction de la police système par défaut ou de la résolution d’affichage. Si vous le souhaitez, la mise à l’échelle automatique peut être désactivée dans une application.

Prudence

Les mélanges arbitraires de modes d'échelle de police et de DPI ne sont pas pris en charge. Bien que vous puissiez mettre à l’échelle un contrôle utilisateur à l’aide d’un mode (par exemple, PPP) et le placer sur un formulaire avec un autre mode (Police) sans problème, mélanger un formulaire de base dans un mode et un formulaire dérivé dans un autre peut entraîner des résultats inattendus.

Mise à l’échelle automatique en action

Windows Forms utilise la logique suivante pour mettre automatiquement à l’échelle les formulaires et leur contenu :

  1. Au moment du design, chaque ContainerControl enregistre le mode de mise à l’échelle et sa résolution actuelle dans les AutoScaleMode et AutoScaleDimensions, respectivement.

  2. Au moment de l’exécution, la résolution réelle est stockée dans la propriété CurrentAutoScaleDimensions. La propriété AutoScaleFactor calcule dynamiquement le rapport entre la résolution de mise à l’échelle au moment de l’exécution et au moment du design.

  3. Lorsque le formulaire se charge, si les valeurs de CurrentAutoScaleDimensions et AutoScaleDimensions sont différentes, alors la méthode PerformAutoScale est appelée pour mettre à l’échelle le contrôle et ses enfants. Cette méthode suspend la disposition et appelle la méthode Scale pour effectuer la mise à l’échelle réelle. Ensuite, la valeur de AutoScaleDimensions est mise à jour pour éviter une mise à l’échelle progressive.

  4. PerformAutoScale est également appelée automatiquement dans les situations suivantes :

    • En réponse à l’événement OnFontChanged si le mode de mise à l’échelle est Font.

    • Lorsque la disposition du contrôle conteneur reprend et qu’une modification est détectée dans les propriétés AutoScaleDimensions ou AutoScaleMode.

    • Comme indiqué ci-dessus, lorsqu’un ContainerControl parent est redimensionné. Chaque contrôle de conteneur est responsable de la mise à l'échelle de ses enfants en utilisant ses propres facteurs de mise à l'échelle, et non ceux de son conteneur parent.

  5. Les contrôles pour enfants peuvent modifier leur comportement d'adaptation à l'échelle par plusieurs moyens :

    • La propriété ScaleChildren peut être substituée pour déterminer si leurs contrôles enfants doivent être mis à l’échelle ou non.

    • La méthode GetScaledBounds peut être substituée pour ajuster les limites auxquelles le contrôle est mis à l’échelle, mais pas la logique de mise à l’échelle.

    • La méthode ScaleControl peut être substituée pour modifier la logique de mise à l’échelle du contrôle actuel.

Voir aussi