Accessibilité active et mise à l’échelle de l’écran Windows Vista

Windows Vista permet aux utilisateurs de modifier le paramètre points par pouce (ppp) afin que la plupart des éléments d’interface utilisateur à l’écran apparaissent plus grands. Bien que cette fonctionnalité soit disponible depuis longtemps dans Microsoft Windows, dans les versions précédentes, la mise à l’échelle devait être implémentée par les applications. Dans Windows Vista, le Gestionnaire de fenêtres de bureau effectue la mise à l’échelle par défaut pour toutes les applications qui ne gèrent pas leur propre mise à l’échelle. Les applications clientes Microsoft Active Accessibility doivent prendre en compte cette fonctionnalité.

Mise à l’échelle dans Windows Vista

Le paramètre ppp par défaut est 96, ce qui signifie que 96 pixels occupent la largeur ou la hauteur d’un pouce fictif. La mesure exacte d’un « pouce » dépend de la taille et de la résolution physique du moniteur. Par exemple, sur un moniteur d’une largeur de 12 pouces, pour une résolution horizontale de 1 280 pixels, une ligne horizontale de 96 pixels s’étend sur 9/10e de pouce.

Changer le paramètre ppp et changer la résolution d’écran sont deux choses différentes. Avec la mise à l’échelle ppp, le nombre de pixels physiques à l’écran reste le même. Toutefois, la mise à l’échelle est appliquée à la taille et à l’emplacement des éléments d’IU. Cette mise à l’échelle peut être effectuée automatiquement par le Gestionnaire de fenêtrage (DWM, Desktop Window Manager) pour le bureau et pour les applications qui ne demandent pas explicitement à ne pas être mises à l’échelle.

En effet, quand l’utilisateur définit le facteur d’échelle à 120 ppp, un pouce vertical ou horizontal à l’écran s’agrandit de 25 %. Toutes les dimensions sont ajustées en conséquence. Le décalage d’une fenêtre par rapport aux bords supérieur et gauche de l’écran augmente de 25 %. La taille de la fenêtre augmente dans la même proportion, ainsi que les décalages et les tailles de tous les éléments d’interface utilisateur qu’elle contient.

Par défaut, le Gestionnaire de fenêtrage n’effectue pas de mise à l’échelle pour les applications qui ne prennent pas en charge ppp quand l’utilisateur définit la valeur du paramètre ppp à 120. Toutefois, il l’effectue quand le paramètre ppp a une valeur personnalisée égale ou supérieure à 144. Toutefois, l’utilisateur peut remplacer le comportement par défaut.

La mise à l’échelle de l’écran pose de nouveaux défis pour les applications qui sont concernées d’une manière ou d’une autre par les coordonnées d’écran. L’écran contient maintenant deux systèmes de coordonnées : l’un physique et l’autre logique. Les coordonnées physiques d’un point correspondent au décalage réel en pixels par rapport au point d’origine en haut à gauche. Les coordonnées logiques correspondent aux décalages tels qu’ils seraient si les pixels eux-mêmes étaient mis à l’échelle.

Supposons que vous concevez une boîte de dialogue avec un bouton aux coordonnées (100, 48). Quand cette boîte de dialogue s’affiche avec la valeur par défaut 96 ppp, le bouton se trouve aux coordonnées physiques (100, 48). À 120 ppp, il se trouve aux coordonnées physiques (125, 60). En revanche, les coordonnées logiques sont les mêmes, quel que soit le paramètre ppp : (100, 48).

Les coordonnées logiques sont importantes, car elles garantissent la cohérence du comportement du système d’exploitation et des applications, quel que soit le paramètre ppp. Par exemple, System.Windows.Forms.Cursor.Position retourne normalement les coordonnées logiques. Si vous placez le curseur sur un élément d’une boîte de dialogue, les mêmes coordonnées sont retournées, quel que soit le paramètre ppp. Si vous dessinez un contrôle aux coordonnées (100, 100), il est placé à ces coordonnées logiques et occupe la même position relative, quel que soit le paramètre ppp.

Mise à l’échelle des clients d’accessibilité active

Microsoft Active Accessibility n’utilise pas de coordonnées logiques. Les méthodes et fonctions suivantes retournent des coordonnées physiques ou les prennent en tant que paramètres.

Par défaut, une application cliente Microsoft Active Accessibility s’exécutant dans un environnement autre que 96 ppp ne sera pas en mesure d’obtenir des résultats corrects à partir de ces appels. Par exemple, étant donné que la position du curseur est en coordonnées logiques, le client ne peut pas simplement transmettre ces coordonnées à AccessibleObjectFromPoint pour obtenir l’élément qui se trouve sous le curseur.

En outre, une application qui crée une fenêtre en dehors de sa zone cliente, telle qu’une application d’accessibilité qui met en surbrillance des éléments d’interface utilisateur ciblés, ne crée pas la fenêtre à l’emplacement d’écran approprié, car la fenêtre sera placée aux coordonnées logiques, et non aux coordonnées physiques retournées par IAccessible::accLocation.

La solution se présente en deux parties :

  • Rendre l’application cliente « sensible aux ppp ». Pour ce faire, appelez la fonction SetProcessDPIAware au démarrage. Cette fonction permet à l’ensemble du processus de prendre en charge ppp, ce qui signifie que toutes les fenêtres qui appartiennent au processus ne sont pas mises à l’échelle.
  • Utilisez des fonctions qui prennent en charge les ppp. Par exemple, pour obtenir les coordonnées du curseur, appelez la fonction GetPhysicalCursorPos . N’utilisez pas GetCursorPos ; son comportement dans les applications prenant en charge les ppp n’est pas défini.

Si votre application effectue une communication interprocessus directe avec des applications qui ne prennent pas en compte les ppp, vous pouvez avoir converti des coordonnées logiques et physiques à l’aide des fonctions PhysicalToLogicalPoint et LogicalToPhysicalPoint .