PhysicalToLogicalPointForPerMonitorDPI-Funktion (winuser.h)

Konvertiert einen Punkt in einem Fenster von physischen Koordinaten in logische Koordinaten, unabhängig von der Dpi-Erkennung (Dots per Inch) des Aufrufers. Weitere Informationen zu DPI-Sensibilisierungsstufen finden Sie unter PROCESS_DPI_AWARENESS.

Syntax

BOOL PhysicalToLogicalPointForPerMonitorDPI(
  [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 , die die zu konvertierenden physischen/Bildschirmkoordinaten angibt. Die neuen logischen Koordinaten werden in diese Struktur kopiert, wenn die Funktion erfolgreich ist.

Rückgabewert

Gibt TRUE zurück, wenn erfolgreich, andernfalls FALSE .

Hinweise

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 der System- und Prozesskommunikation, 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 Koordinatenbereich zurück. Dieses Verhalten behält die Funktionalität für die Mehrheit der Anwendungen bei, aber es gibt 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-Erkennung des Aufrufers zurück. Dies ist ideal für die meisten Anwendungen. Der Aufrufer benötigt jedoch möglicherweise die Informationen, die auf dem DPI-Bewusstsein 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 verwenden, um physische Koordinaten abzurufen, und anschließend 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 den Wert PROCESS_PER_MONITOR_AWARE. Die PROCESS_PER_MONITOR_AWARE-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 Rechteck basierend auf 96 DPI-Koordinaten, während die PROCESS_PER_MONITOR_AWARE-App Koordinaten erhält, die dem tatsächlichen DPI-Wert des Monitors entsprechen. Wenn der PROCESS_DPI_UNAWARE das Rechteck benötigt, das das System an die PROCESS_PER_MONITOR_AWARE-App zurückgegeben hat, könnte es LogicalToPhysicalPointForPerMonitorDPI für die Ecken seines Rechtecks aufrufen und ein Handle an das Fenster der PROCESS_PER_MONITOR_AWARE App übergeben. Dadurch werden Punkte zurückgegeben, die auf dem Bewusstsein der anderen App basieren, die zum Erstellen eines Rechtecks verwendet werden können. Dies funktioniert, da ein PROCESS_PER_MONITOR_AWARE den tatsächlichen DPI-Wert des Monitors verwendet, logische und physische Koordinaten identisch sind.

Anforderungen

   
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

LogicalToPhysicalPointForPerMonitorDPI

PROCESS_DPI_AWARENESS