Share via


Informazioni sui problemi di ridimensionamento dello schermo

Windows Vista e versioni successive del sistema operativo consentono agli utenti di modificare l'impostazione dei punti per pollice (dpi) in modo che la maggior parte degli elementi dell'interfaccia utente sullo schermo venga visualizzata più grande. Nelle versioni precedenti di Windows, il ridimensionamento doveva essere implementato dalle applicazioni. In Windows Vista e versioni successive, Desktop Window Manager (DWM) esegue il ridimensionamento predefinito per tutte le applicazioni che non gestiscono il proprio ridimensionamento. Le applicazioni client di Microsoft Automazione interfaccia utente devono tenere conto di questa funzionalità.

In questo argomento sono incluse le sezioni seguenti:

Ridimensionamento in Windows Vista e versioni successive

L'impostazione dpi predefinita è 96, il che significa che 96 pixel occupano una larghezza o un'altezza di un pollice notale. La misura esatta di un pollice dipende dalle dimensioni e dalla risoluzione fisica del monitor. Ad esempio, su un monitor con una larghezza di 12 pollici e una risoluzione orizzontale di 1280 pixel, una riga orizzontale di 96 pixel si estende per circa 9/10 di un pollice.

La modifica dell'impostazione dpi non equivale alla modifica della risoluzione dello schermo. Con la scalabilità dpi, il numero di pixel fisici sullo schermo rimane invariato. Tuttavia, il ridimensionamento viene applicato alle dimensioni e alla posizione degli elementi dell'interfaccia utente. Questa scalabilità può essere eseguita automaticamente dal DWM per il desktop e per le applicazioni che non richiedono esplicitamente di non essere ridimensionate.

In effetti, quando l'utente imposta il fattore di scala su 120 dpi, un pollice verticale o orizzontale sullo schermo diventa più grande del 25%. Tutte le dimensioni vengono ridimensionate di conseguenza. L'offset di una finestra dell'applicazione dal bordo superiore e dal bordo sinistro dello schermo aumenta del 25%. Se il ridimensionamento delle applicazioni è abilitato e l'applicazione non riconosce dpi, le dimensioni della finestra aumentano nella stessa proporzione, insieme agli offset e alle dimensioni di tutti gli elementi dell'interfaccia utente contenuti.

Nota

Per impostazione predefinita, DWM non esegue il ridimensionamento per le applicazioni non compatibili con dpi quando l'utente imposta il valore DPI su 120, ma esegue il ridimensionamento quando il valore DPI è impostato su un valore personalizzato pari a 144 o superiore. È tuttavia possibile ignorare questo comportamento predefinito.

 

Il ridimensionamento dello schermo crea nuove sfide per le applicazioni che dipendono dalle coordinate dello schermo. Lo schermo contiene ora due sistemi di coordinate: fisico e logico. Le coordinate fisiche di un punto sono l'offset effettivo in pixel dall'angolo superiore sinistro del punto di origine. Le coordinate logiche sono gli offset così come si presenterebbero se i pixel fossero ridimensionati.

Si supponga di progettare una finestra di dialogo con un pulsante in corrispondenza delle coordinate (100, 48). Quando questa finestra di dialogo viene visualizzata al valore predefinito di 96 dpi, il pulsante si trova in corrispondenza delle coordinate fisiche di (100, 48). A 120 dpi, si trova a coordinate fisiche di (125, 60). Tuttavia, le coordinate logiche sono uguali a qualsiasi impostazione dpi: (100, 48).

Le coordinate logiche sono importanti perché rendono coerente il comportamento del sistema operativo e delle applicazioni, indipendentemente dall'impostazione dpi. Ad esempio, in genere, la funzione GetCursorPos restituisce le coordinate logiche. Se si sposta il cursore su un elemento in una finestra di dialogo, vengono restituite le stesse coordinate, indipendentemente dall'impostazione dpi. Se si disegna un controllo in corrispondenza di (100, 100), viene disegnato in tali coordinate logiche e occupa la stessa posizione relativa in qualsiasi impostazione dpi.

Ridimensionamento nei client di automazione interfaccia utente

L'API Automazione interfaccia utente non usa coordinate logiche. I metodi e le proprietà seguenti restituiscono coordinate fisiche o accettano coordinate fisiche come parametri.

Per impostazione predefinita, Automazione interfaccia utente applicazioni in esecuzione in un ambiente che non è impostato su 96 dpi non otterranno risultati corretti da questi metodi e proprietà. Ad esempio, poiché la posizione del cursore si trova in coordinate logiche, il client non può passare queste coordinate a IUIAutomation::ElementFromPoint per ottenere l'elemento che si trova sotto il cursore. Inoltre, l'applicazione non sarà in grado di posizionare correttamente le finestre al di fuori dell'area client.

La soluzione ha due parti.

Prima di tutto, rendere compatibile con dpi l'applicazione client. A tale scopo, chiamare la funzione SetProcessDPIAware all'avvio. Questa funzione rende l'intero processo compatibile con dpi, ovvero tutte le finestre che appartengono al processo non vengono ridimensionate.

In secondo luogo, per ottenere le coordinate del cursore, chiamare la funzione GetPhysicalCursorPos .