énumération PROCESS_DPI_AWARENESS (shellscalingapi.h)
Identifie les valeurs de reconnaissance des points par pouce (ppp). La reconnaissance ppp indique la quantité de travail de mise à l’échelle qu’une application effectue pour ppp par rapport à la quantité effectuée par le système.
Les utilisateurs ont la possibilité de définir le facteur d’échelle PPP sur leurs affichages indépendamment les uns des autres. Certaines applications héritées ne sont pas en mesure d’ajuster leur mise à l’échelle pour plusieurs paramètres PPP. Pour permettre aux utilisateurs d’utiliser ces applications sans contenu trop grand ou trop petit sur les écrans, Windows peut appliquer la virtualisation PPP à une application, ce qui entraîne sa mise à l’échelle automatiquement par le système pour correspondre à la résolution de l’affichage actuel. La valeur PROCESS_DPI_AWARENESS indique le niveau de mise à l’échelle géré par votre application et la quantité fournie par Windows. Gardez à l’esprit que les applications mises à l’échelle par le système peuvent apparaître floues et lisent des données virtualisées sur le moniteur pour maintenir la compatibilité.
Syntax
typedef enum PROCESS_DPI_AWARENESS {
PROCESS_DPI_UNAWARE = 0,
PROCESS_SYSTEM_DPI_AWARE = 1,
PROCESS_PER_MONITOR_DPI_AWARE = 2
} ;
Constantes
PROCESS_DPI_UNAWARE Valeur : 0 Ppp non pris en compte. Cette application n’est pas mise à l’échelle pour les modifications PPP et est toujours supposée avoir un facteur d’échelle de 100 % (96 PPP). Il sera automatiquement mis à l’échelle par le système sur n’importe quel autre paramètre PPP. |
PROCESS_SYSTEM_DPI_AWARE Valeur : 1 Prise en charge de la résolution du système. Cette application n’est pas mise à l’échelle pour les modifications ppp. Il interroge l’ppp une fois et utilise cette valeur pendant la durée de vie de l’application. Si la PPP change, l’application ne s’ajuste pas à la nouvelle valeur PPP. Elle est automatiquement mise à l’échelle par le système lorsque la pppe change de la valeur système. |
PROCESS_PER_MONITOR_DPI_AWARE Valeur : 2 Prise en charge de la résolution par moniteur. Cette application recherche l’ppp lors de sa création et ajuste le facteur d’échelle chaque fois que le PPP change. Ces applications ne sont pas automatiquement mises à l’échelle par le système. |
Remarques
Les versions précédentes de Windows vous obligeait à définir la reconnaissance PPP pour l’ensemble de l’application. Désormais, la prise de conscience PPP est liée à des threads, des processus ou des fenêtres individuels. Cela signifie que la reconnaissance PPP peut changer pendant l’exécution de l’application et que plusieurs fenêtres peuvent avoir leurs propres valeurs de reconnaissance ppp indépendantes. Consultez DPI_AWARENESS pour plus d’informations sur le fonctionnement actuel de la sensibilisation aux ppp. Les recommandations ci-dessous concernant la définition de la reconnaissance PPP dans le manifeste de l’application sont toujours prises en charge, mais la recommandation actuelle est d’utiliser le DPI_AWARENESS_CONTEXT.
Si votre application est PROCESS_DPI_UNAWARE, il n’est pas nécessaire de définir une valeur dans le manifeste de l’application. PROCESS_DPI_UNAWARE est la valeur par défaut pour les applications, sauf si une autre valeur est spécifiée.
Dans les versions précédentes de Windows, il n’existait aucun paramètre pour PROCESS_PER_MONITOR_DPI_AWARE. Les applications n’étaient pas au courant ou étaient au courant de la résolution. Les applications héritées qui étaient classées comme prenant en charge ppp avant Windows 8.1 sont considérées comme ayant un paramètre PROCESS_DPI_AWARENESS de PROCESS_SYSTEM_DPI_AWARE dans les versions actuelles de Windows.
Une application PROCESS_DPI_UNAWARE utilise toujours un facteur de mise à l’échelle de 100 % (96 PPP). Dans ce scénario, une fenêtre PROCESS_DPI_UNAWARE est créée avec une taille de 500 par 500. Sur l’affichage A, il s’affiche en mode natif sans mise à l’échelle. Sur les écrans B et C, il sera automatiquement mis à l’échelle par le système d’un facteur de 2 et 3 respectivement. Cela est dû au fait qu’un PROCESS_DPI_UNAWARE suppose toujours un PPP de 96, et le système en tient compte. Si l’application interroge la taille de la fenêtre, elle obtient toujours une valeur de 500 par 500, quel que soit l’affichage dans lequel elle se trouve. Si cette application devait demander la résolution de l’un des trois moniteurs, elle recevra 96.
Considérez maintenant une application PROCESS_SYSTEM_DPI_AWARE. N’oubliez pas que dans l’exemple, la résolution du système est de 200 % ou 192 PPP. Cela signifie que toutes les fenêtres créées par cette application s’affichent en mode natif sur l’affichage B. Si la fenêtre se déplace pour afficher A, elle est automatiquement réduite d’un facteur de 2. Cela est dû au fait qu’une application PROCESS_SYSTEM_DPI_AWARE dans ce scénario suppose que la ppp sera toujours 192. Il interroge l’ppp au démarrage, puis ne le modifie jamais. Le système prend en charge cela en effectuant automatiquement un scale-down lors du déplacement vers l’affichage A. De même, si la fenêtre se déplace pour afficher C, le système est automatiquement mis à l’échelle d’un facteur de 1,5. Si l’application interroge la taille de la fenêtre, elle obtient toujours la même valeur, similaire à PROCESS_DPI_UNAWARE. S’il demande l’PPP de l’un des trois moniteurs, il recevra 192.
Contrairement aux autres valeurs de sensibilisation, PROCESS_PER_MONITOR_DPI_AWARE doivent s’adapter à l’affichage sur lequel il est activé. Cela signifie qu’il est toujours rendu en mode natif et n’est jamais mis à l’échelle par le système. Il incombe à l’application d’ajuster le facteur d’échelle lors de la réception du message WM_DPICHANGED . Une partie de ce message inclut un rect suggéré pour la fenêtre. Cette suggestion est la fenêtre actuelle mise à l’échelle de l’ancienne valeur PPP à la nouvelle valeur PPP. Par exemple, une fenêtre qui est de 500 par 500 sur l’affichage A et déplacée vers l’affichage B recevra un rect de fenêtre suggéré qui est de 1000 par 1000. Si cette même fenêtre est déplacée pour afficher C, la fenêtre suggérée rect attachée à WM_DPICHANGED sera 1500 par 1500. En outre, lorsque cette application interroge la taille de la fenêtre, elle obtient toujours la valeur native réelle. De même, s’il demande le DPI de l’un des trois moniteurs, il recevra respectivement 96, 192 et 288.
En raison de la virtualisation PPP, si une application interroge une autre application avec un niveau de sensibilisation différent pour les informations dépendantes de ppp, le système met automatiquement à l’échelle les valeurs pour correspondre au niveau de sensibilisation de l’appelant. Par exemple, si vous appelez GetWindowRect et passez une fenêtre créée par une autre application. En utilisant la situation décrite ci-dessus, supposons qu’une application PROCESS_DPI_UNAWARE a créé une fenêtre de 500 par 500 sur l’affichage C. Si vous interrogez la rect de fenêtre à partir d’une autre application, la taille du rect varie en fonction de la prise en charge ppp de votre application.
PROCESS_DPI_UNAWARE | Vous obtiendrez un rect de 500 par 500, car le système suppose un PPP de 96 et met automatiquement à l’échelle la rect réelle d’un facteur de 3. |
PROCESS_SYSTEM_DPI_AWARE | Vous obtiendrez une valeur de 1 000 par 1000 rect, car le système suppose un PPP de 192 et met automatiquement à l’échelle la rect réelle d’un facteur de 3/2. |
PROCESS_PER_MONITOR_DPI_AWARE | Vous obtiendrez un rect de 1500 par 1500, car le système utilisera la résolution réelle de l’affichage et n’effectuera aucune mise à l’échelle en arrière-plan. |
Exemples
Cet extrait de code montre comment définir une valeur de PROCESS_SYSTEM_DPI_AWARE dans le manifeste de votre application.
<dpiAware>true</dpiAware>
Cet extrait de code montre comment définir une valeur de PROCESS_PER_MONITOR_DPI_AWARE dans le manifeste de votre application.
<dpiAware>true/PM</dpiAware>
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 8.1 [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2012 R2 [applications de bureau uniquement] |
En-tête | shellscalingapi.h |