Funzione PhysicalToLogicalPointForPerMonitorDPI (winuser.h)

Converte un punto in una finestra da coordinate fisiche in coordinate logiche, indipendentemente dai punti per pollice (dpi) di consapevolezza del chiamante. Per altre informazioni sui livelli di consapevolezza DPI, vedere PROCESS_DPI_AWARENESS.

Sintassi

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

Parametri

[in] hWnd

Handle nella finestra la cui trasformazione viene usata per la conversione.

[in, out] lpPoint

Puntatore a una struttura POINT che specifica le coordinate fisiche/dello schermo da convertire. Le nuove coordinate logiche vengono copiate in questa struttura se la funzione ha esito positivo.

Valore restituito

Restituisce TRUE se ha esito positivo o FALSE in caso contrario.

Commenti

In Windows 8, le applicazioni con riconoscimento dpi di sistema si traducono tra spazio fisico e logico usando PhysicalToLogicPoint eLogicalToPhysicalPoint. In Windows 8.1, la virtualizzazione aggiuntiva del sistema e delle comunicazioni tra processi significa che per la maggior parte delle applicazioni non sono necessarie queste API. Di conseguenza, in Windows 8.1, queste API non trasformano più i punti. Il sistema restituisce tutti i punti a un'applicazione nello spazio delle coordinate. Questo comportamento mantiene la funzionalità per la maggior parte delle applicazioni, ma esistono alcune eccezioni in cui è necessario apportare modifiche per assicurarsi che l'applicazione funzioni come previsto.

Ad esempio, un'applicazione potrebbe dover camminare l'intero albero delle finestre di un altro processo e chiedere al sistema informazioni dipendenti da DPI sulla finestra. Per impostazione predefinita, il sistema restituirà le informazioni in base alla consapevolezza DPI del chiamante. Questo è ideale per la maggior parte delle applicazioni. Tuttavia, il chiamante potrebbe richiedere le informazioni in base alla consapevolezza DPI dell'applicazione associata alla finestra. Ciò potrebbe essere necessario perché le due applicazioni inviano informazioni dipendenti da DPI tra loro direttamente. In questo caso, l'applicazione può usare LogicalToPhysicalPointForPerMonitorDPI per ottenere coordinate fisiche e quindi usare PhysicalToLogicPointForPerMonitorDPI per convertire le coordinate fisiche in coordinate logiche in base alla consapevolezza DPI del HWND fornito.

Prendere in considerazione due applicazioni, uno ha un valore PROCESS_DPI_AWARENESS di PROCESS_DPI_UNAWARE e l'altro ha un valore di PROCESS_PER_MONITOR_AWARE. L'app PROCESS_PER_MONITOR_AWARE crea una finestra su un singolo monitor in cui il fattore di scala è 200% (192 DPI). Se entrambe le app chiamano GetWindowRect in questa finestra, riceveranno valori diversi. L'app PROCESS_DPI_UNAWARE riceverà una correzione basata su coordinate DPI 96, mentre l'app PROCESS_PER_MONITOR_AWARE riceverà coordinate corrispondenti alla dpi effettiva del monitoraggio. Se l'PROCESS_DPI_UNAWARE richiede la correzione restituita dal sistema all'app PROCESS_PER_MONITOR_AWARE , potrebbe chiamare LogicalToPhysicalPointForPerMonitorDPI per gli angoli del relativo rect e passare un handle alla finestra dell'app PROCESS_PER_MONITOR_AWARE . Questo restituirà punti in base alla consapevolezza dell'altra app che può essere usata per creare una correzione. Ciò funziona perché una PROCESS_PER_MONITOR_AWARE usa la dpi effettiva del monitor, le coordinate logiche e fisiche sono identiche.

Requisiti

   
Client minimo supportato Windows 8.1 [solo app desktop]
Server minimo supportato Windows Server 2012 R2 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione Winuser
Libreria User32.lib
DLL User32.dll
Set di API ext-ms-win-ntuser-window-l1-1-4 (introdotta in Windows 10, versione 10.0.14393)

Vedi anche

LogicalToPhysicalPointForPerMonitorDPI

PROCESS_DPI_AWARENESS