Condividi tramite


Funzione LogicalToPhysicalPointForPerMonitorDPI (winuser.h)

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

Sintassi

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

Parametri

[in] hWnd

Handle per la finestra la cui trasformazione viene utilizzata per la conversione.

[in, out] lpPoint

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

Valore restituito

Restituisce TRUE se l'operazione riesce o FALSE in caso contrario.

Commenti

In Windows 8, le applicazioni con riconoscimento dpi di sistema convertite tra spazio fisico e logico usando PhysicalToLogicalPoint e LogicalToPhysicalPoint. 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 sull'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. Questa opzione è 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 PhysicalToLogicalPointForPerMonitorDPI per convertire le coordinate fisiche in coordinate logiche basate sulla consapevolezza DPI del valore HWND specificato.

Si considerino due applicazioni, una ha un valore PROCESS_DPI_AWARENESS di PROCESS_DPI_UNAWARE e l'altra ha un valore di PROCESS_PER_MONITOR_AWARE. L'app PROCESS_DPI_UNAWARE 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 in base a 96 coordinate DPI, mentre l'app PROCESS_PER_MONITOR_AWARE riceverà coordinate corrispondenti al valore DPI effettivo del monitor. Se il PROCESS_PER_MONITOR_AWARE necessita della correzione restituita dal sistema all'app PROCESS_DPI_UNAWARE , potrebbe chiamare LogicalToPhysicalPointForPerMonitorDPI per gli angoli del relativo rect e passare l'handle alla finestra dell'app PROCESS_DPI_UNAWARE . Verranno restituiti punti in base alla consapevolezza dell'altra app che può essere usata per creare un rect.

Suggerimento  

Poiché un'applicazione con un valore PROCESS_DPI_AWARENESS di PROCESS_PER_MONITOR_AWARE usa il valore DPI effettivo del monitoraggio, le coordinate fisiche e logiche sono le stesse per questa app.

 

Requisiti

Requisito Valore
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 (introdotto in Windows 10 versione 10.0.14393)

Vedi anche

PROCESS_DPI_AWARENESS

PhysicalToLogicalPointForPerMonitorDPI