LogicalToPhysicalPointForPerMonitorDPI-Funktion (winuser.h)

Konvertiert einen Punkt in einem Fenster von logischen Koordinaten in physische Koordinaten, unabhängig von der dpi-Wahrnehmung (Dots per Inch) des Aufrufers. Weitere Informationen zu DPI-Bewusstseinsstufen finden Sie unter PROCESS_DPI_AWARENESS.

Syntax

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

Parameter

[in] hWnd

Ein Handle für das Fenster, dessen Transformation für die Konvertierung verwendet wird.

[in, out] 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

Gibt TRUE zurück, wenn der Vorgang erfolgreich war, oder andernfalls FALSE .

Hinweise

In Windows 8 werden systembasierte DPI-fähige Anwendungen mithilfe von PhysicalToLogicalPoint und LogicalToPhysicalPoint zwischen physischem und logischem Raum übersetzt. 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 diese APIs 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.

Beispielsweise muss eine Anwendung möglicherweise die gesamte Fensterstruktur eines anderen Prozesses durchlaufen und das System nach DPI-abhängigen Informationen zum Fenster fragen. Standardmäßig gibt das System die Informationen basierend auf der DPI-Wahrnehmung des Aufrufers zurück. Dies ist ideal für die meisten Anwendungen. Der Aufrufer benötigt jedoch möglicherweise die Informationen, die auf der DPI-Wahrnehmung der Anwendung basieren, die dem Fenster zugeordnet ist. Dies kann erforderlich sein, da die beiden Anwendungen DPI-abhängige Informationen direkt untereinander senden. In diesem Fall kann die Anwendung LogicalToPhysicalPointForPerMonitorDPI zum Abrufen physischer Koordinaten verwenden und dann PhysicalToLogicalPointForPerMonitorDPI verwenden, um die physischen Koordinaten basierend auf der DPI-Wahrnehmung des bereitgestellten HWND in logische Koordinaten zu konvertieren.

Betrachten Sie zwei Anwendungen, eine hat den PROCESS_DPI_AWARENESS Wert PROCESS_DPI_UNAWARE und die andere hat den Wert PROCESS_PER_MONITOR_AWARE. Die PROCESS_DPI_UNAWARE-App erstellt ein Fenster auf einem einzelnen Monitor, in dem der Skalierungsfaktor 200 % (192 DPI) beträgt. Wenn beide Apps GetWindowRect in diesem Fenster aufrufen, erhalten sie unterschiedliche Werte. Die PROCESS_DPI_UNAWARE-App erhält ein Rect basierend auf 96 DPI-Koordinaten, während die PROCESS_PER_MONITOR_AWARE App Koordinaten erhält, die dem tatsächlichen DPI des Monitors entsprechen. Wenn der PROCESS_PER_MONITOR_AWARE das Rect benötigt, das das System an die PROCESS_DPI_UNAWARE-App zurückgegeben hat, könnte es LogicalToPhysicalPointForPerMonitorDPI für die Ecken seines Rect aufrufen und das Handle an das Fenster der PROCESS_DPI_UNAWARE App übergeben. Dadurch werden Punkte zurückgegeben, die auf dem Bewusstsein der anderen App basieren, die zum Erstellen eines Rect verwendet werden können.

Tipp  

Da eine Anwendung mit dem PROCESS_DPI_AWARENESS Wert PROCESS_PER_MONITOR_AWARE den tatsächlichen DPI des Monitors verwendet, sind physische und logische Koordinaten für diese App identisch.

 

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 8.1 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2012 R2 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile winuser.h
Bibliothek User32.lib
DLL User32.dll
APIs ext-ms-win-ntuser-window-l1-1-4 (eingeführt in Windows 10, Version 10.0.14393)

Weitere Informationen

PROCESS_DPI_AWARENESS

PhysicalToLogicalPointForPerMonitorDPI