LogicalToPhysicalPoint-Funktion (winuser.h)
Konvertiert die logischen Koordinaten eines Punkts in einem Fenster in physische Koordinaten.
Syntax
BOOL LogicalToPhysicalPoint(
[in] HWND hWnd,
[in, out] LPPOINT lpPoint
);
Parameter
[in] hWnd
Typ: HWND
Ein Handle für das Fenster, dessen Transformation für die Konvertierung verwendet wird. Fenster der obersten Ebene werden vollständig unterstützt. Bei untergeordneten Fenstern wird nur der Bereich der Überlappung zwischen dem übergeordneten und dem untergeordneten Fenster konvertiert.
[in, out] lpPoint
Typ: LPPOINT
Ein Zeiger auf eine POINT-Struktur , der die zu konvertierenden logischen Koordinaten angibt. Die neuen physischen Koordinaten werden in diese Struktur kopiert, wenn die Funktion erfolgreich ist.
Rückgabewert
Keine
Bemerkungen
Windows Vista führt das Konzept der physischen Koordinaten ein. Der Desktopfenster-Manager (DWM) skaliert nicht dpi-fähige Fenster (Dots per Inch), wenn die Anzeige eine hohe dpi-Auflösung aufweist. Das auf dem Bildschirm angezeigte Fenster entspricht den physischen Koordinaten. Die Anwendung funktioniert weiterhin im logischen Raum. Daher unterscheidet sich die Ansicht des Fensters der Anwendung von der, die auf dem Bildschirm angezeigt wird. Bei skalierten Fenstern unterscheiden sich logische und physische Koordinaten.
LogicalToPhysicalPoint ist eine Transformations-API, die von einem Prozess aufgerufen werden kann, der sich selbst als dpi-fähig deklariert. Die Funktion verwendet das durch den hWnd-Parameter identifizierte Fenster und die in der POINT-Struktur angegebenen logischen Koordinaten, um die physischen Koordinaten zu berechnen.
Die Funktion LogicalToPhysicalPoint ersetzt die logischen Koordinaten in der POINT-Struktur durch die physischen Koordinaten. Die physischen Koordinaten sind relativ zur linken oberen Ecke des Bildschirms. Die Koordinaten müssen sich innerhalb des Clientbereichs von hWnd befinden.
Auf allen Plattformen schlägt LogicalToPhysicalPoint in einem Fenster mit einer Breite oder Höhe von 0 fehl. Eine Anwendung muss zuerst eine Breite und Höhe von nicht 0 festlegen, indem sie z. B. MoveWindow aufruft. In einigen Versionen von Windows (einschließlich Windows 7) schlägt LogicalToPhysicalPoint weiterhin fehl, wenn MoveWindow aufgerufen wurde, nachdem ein Aufruf von ShowWindow mit SH_HIDE das Fenster ausgeblendet hat.
In Windows 8 übersetzen System-DPI-fähige Anwendungen mithilfe von PhysicalToLogicalPoint und LogicalToPhysicalPoint zwischen physischem und logischem Raum. In Windows 8.1 bedeutet die zusätzliche Virtualisierung des Systems und der prozessübergreifenden Kommunikation, dass Sie diese APIs für die meisten Anwendungen nicht benötigen. Daher transformieren PhysicalToLogicalPoint und LogicalToPhysicalPoint in Windows 8.1 keine Punkte mehr. Das System gibt alle Punkte an eine Anwendung in einem eigenen Koordinatenraum zurück. Dieses Verhalten behält die Funktionalität für die meisten Anwendungen bei, es gibt jedoch einige Ausnahmen, in denen Sie Änderungen vornehmen müssen, um sicherzustellen, dass die Anwendung wie erwartet funktioniert. Verwenden Sie in diesen Fällen PhysicalToLogicalPointForPerMonitorDPI und LogicalToPhysicalPointForPerMonitorDPI.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows Vista [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2008 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | winuser.h (einschließlich Windows.h) |
Bibliothek | User32.lib |
DLL | User32.dll |
APIs | ext-ms-win-ntuser-window-l1-1-1 (eingeführt in Windows 8.1) |