PhysicalToLogicalPoint, fonction (winuser.h)
Convertit les coordonnées physiques d’un point dans une fenêtre en coordonnées logiques.
Syntaxe
BOOL PhysicalToLogicalPoint(
[in] HWND hWnd,
[in, out] LPPOINT lpPoint
);
Paramètres
[in] hWnd
Type : HWND
Handle vers la fenêtre dont la transformation est utilisée pour la conversion. Les fenêtres de niveau supérieur sont entièrement prises en charge. Dans le cas des fenêtres enfants, seule la zone de chevauchement entre la fenêtre parente et la fenêtre enfant est convertie.
[in, out] lpPoint
Type : 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 de retour
None
Remarques
Windows Vista introduit le concept de coordonnées physiques. Desktop Window Manager (DWM) met à l’échelle les fenêtres qui ne prennent pas en compte les points par pouce (ppp) lorsque l’affichage est élevé. La fenêtre affichée à l’écran correspond aux coordonnées physiques. L’application continue de fonctionner dans l’espace logique. Par conséquent, la vue de l’application de la fenêtre est différente de celle qui s’affiche à l’écran. Pour les fenêtres mises à l’échelle, les coordonnées logiques et physiques sont différentes.
La fonction utilise la fenêtre identifiée par le paramètre hWnd et les coordonnées physiques fournies dans la structure POINT pour calculer les coordonnées logiques. Les coordonnées logiques sont les coordonnées non mises à l’échelle qui apparaissent à l’application de manière programmatique. En d’autres termes, les coordonnées logiques sont les coordonnées que l’application reconnaît, qui peuvent être différentes des coordonnées physiques. L’API remplace ensuite les coordonnées physiques par les coordonnées logiques. Les nouvelles coordonnées sont dans les coordonnées mondiales dont l’origine est (0, 0) sur le bureau. Les coordonnées passées à l’API doivent être sur le hWnd.
Les coordonnées sources sont exprimées en unités d’appareil.
Sur toutes les plateformes, PhysicalToLogicalPoint échoue sur une fenêtre dont la largeur ou la hauteur est égale à 0 ; Une application doit d’abord établir une largeur et une hauteur autres que 0 en appelant, par exemple , MoveWindow. Sur certaines versions de Windows (y compris Windows 7), PhysicalToLogicalPoint échoue toujours si MoveWindow a été appelé après un appel à ShowWindow avec SH_HIDE a masqué la fenêtre.
Dans Windows 8, les applications prenant en charge le système ppp traduisent l’espace physique et l’espace logique à l’aide de PhysicalToLogicalPoint et LogicalToPhysicalPoint. En Windows 8.1, la virtualisation supplémentaire du système et des communications interprocesseurs signifie que pour la majorité des applications, vous n’avez pas besoin de ces API. Par conséquent, dans Windows 8.1, PhysicalToLogicalPoint et LogicalToPhysicalPoint ne transforment plus de points. Le système retourne tous les points à une application dans son propre espace de coordonnées. Ce comportement conserve la fonctionnalité pour la majorité des applications, mais il existe des exceptions dans lesquelles vous devez apporter des modifications pour vous assurer que l’application fonctionne comme prévu. Dans ce cas, utilisez PhysicalToLogicalPointForPerMonitorDPI et LogicalToPhysicalPointForPerMonitorDPI.
Configuration requise
Client minimal pris en charge | Windows Vista [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2008 [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | winuser.h (inclure Windows.h) |
Bibliothèque | User32.lib |
DLL | User32.dll |
Ensemble d’API | ext-ms-win-ntuser-window-l1-1-1 (introduit dans Windows 8.1) |