PhysicalToLogicalPoint-Funktion (winuser.h)

Konvertiert die physischen Koordinaten eines Punkts in einem Fenster in logische Koordinaten.

Syntax

BOOL PhysicalToLogicalPoint(
  [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 physischen/Bildschirmkoordinaten angibt. Die neuen logischen 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.

Die Funktion verwendet das durch den hWnd-Parameter identifizierte Fenster und die in der POINT-Struktur angegebenen physischen Koordinaten, um die logischen Koordinaten zu berechnen. Die logischen Koordinaten sind die nicht skalierten Koordinaten, die der Anwendung programmgesteuert angezeigt werden. Mit anderen Worten, die logischen Koordinaten sind die Koordinaten, die die Anwendung erkennt, die sich von den physischen Koordinaten unterscheiden können. Die API ersetzt dann die physischen Koordinaten durch die logischen Koordinaten. Die neuen Koordinaten befinden sich in den Weltkoordinaten, deren Ursprung (0, 0) auf dem Desktop ist. Die Koordinaten, die an die API übergeben werden, müssen sich auf dem hWnd-Wert befindet.

Die Quellkoordinaten befinden sich in Geräteeinheiten.

Auf allen Plattformen schlägt PhysicalToLogicalPoint 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) tritt PhysicalToLogicalPoint weiterhin auf, 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

   
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)