Partager via


Fonction PhysicalToLogicalPointForPerMonitorDPI (winuser.h)

Convertit un point dans une fenêtre à partir de coordonnées physiques en coordonnées logiques, quelle que soit la prise de conscience des points par pouce (ppp) de l’appelant. Pour plus d’informations sur les niveaux de sensibilisation DPI, consultez PROCESS_DPI_AWARENESS.

Syntaxe

BOOL PhysicalToLogicalPointForPerMonitorDPI(
  [in]      HWND    hWnd,
  [in, out] LPPOINT lpPoint
);

Paramètres

[in] hWnd

Handle de la fenêtre dont la transformation est utilisée pour la conversion.

[in, out] lpPoint

Pointeur vers une structure POINT qui spécifie les coordonnées physiques/d’écran à convertir. Les nouvelles coordonnées logiques sont copiées dans cette structure si la fonction réussit.

Valeur retournée

Retourne LA valeur TRUE si elle réussit ou FALSE dans le cas contraire.

Remarques

Dans Windows 8, les applications prenant en charge le DPI du système se traduisent entre l’espace physique et l’espace logique à l’aide de PhysicalToLogicalPoint et de LogicalToPhysicalPoint. Dans Windows 8.1, la virtualisation supplémentaire du système et des communications inter-processus signifie que pour la majorité des applications, vous n’avez pas besoin de ces API. Par conséquent, dans Windows 8.1, ces API ne transforment plus de points. Le système retourne tous les points à une application dans son propre espace de coordonnées. Ce comportement conserve les fonctionnalités pour la majorité des applications, mais il existe quelques exceptions dans lesquelles vous devez apporter des modifications pour vous assurer que l’application fonctionne comme prévu.

Par exemple, une application peut avoir besoin de parcourir toute l’arborescence de fenêtre d’un autre processus et de demander au système des informations dépendantes des PPP sur la fenêtre. Par défaut, le système retourne les informations en fonction de la connaissance DPI de l’appelant. C’est idéal pour la plupart des applications. Toutefois, l’appelant peut avoir besoin des informations en fonction de la connaissance DPI de l’application associée à la fenêtre. Cela peut être nécessaire, car les deux applications envoient des informations dépendantes des PPP entre elles directement. Dans ce cas, l’application peut utiliser LogicalToPhysicalPointForPerMonitorDPI pour obtenir des coordonnées physiques, puis utiliser PhysicalToLogicalPointForPerMonitorDPI pour convertir les coordonnées physiques en coordonnées logiques en fonction de la prise de conscience du HWND fourni.

Considérez deux applications : l’une a une valeur PROCESS_DPI_AWARENESS de PROCESS_DPI_UNAWARE et l’autre a une valeur de PROCESS_PER_MONITOR_AWARE. L’application PROCESS_PER_MONITOR_AWARE crée une fenêtre sur un seul moniteur où le facteur d’échelle est de 200 % (192 PPP). Si les deux applications appellent GetWindowRect dans cette fenêtre, elles recevront des valeurs différentes. L’application PROCESS_DPI_UNAWARE reçoit un rect basé sur 96 coordonnées ppp, tandis que l’application PROCESS_PER_MONITOR_AWARE reçoit des coordonnées correspondant à la DPI réelle du moniteur. Si le PROCESS_DPI_UNAWARE a besoin du rect que le système a retourné à l’application PROCESS_PER_MONITOR_AWARE , il peut appeler LogicalToPhysicalPointForPerMonitorDPI pour les coins de son rect et passer un handle à la fenêtre de l’application PROCESS_PER_MONITOR_AWARE . Cela retourne des points en fonction de la conscience de l’autre application qui peuvent être utilisés pour créer un rect. Cela fonctionne parce qu’un PROCESS_PER_MONITOR_AWARE utilise le DPI réel du moniteur, les coordonnées logiques et physiques sont identiques.

Configuration requise

   
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]
Plateforme cible Windows
En-tête winuser.h
Bibliothèque User32.lib
DLL User32.dll
Ensemble d’API ext-ms-win-ntuser-window-l1-1-4 (introduit dans Windows 10, version 10.0.14393)

Voir aussi

LogicalToPhysicalPointForPerMonitorDPI

PROCESS_DPI_AWARENESS