Condividi tramite


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 appaia 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 Automazione interfaccia utente Microsoft devono tenere conto di questa funzionalità.

Questo argomento contiene le sezioni seguenti:

Ridimensionamento in Windows Vista e le versioni successive

L'impostazione dpi predefinita è 96, ovvero 96 pixel occupano una larghezza o un'altezza di un pollice notzionale. La misura esatta di un "pollice" dipende dalle dimensioni e dalla risoluzione fisica del monitor. Ad esempio, su un monitor di 12 pollici di larghezza, a una risoluzione orizzontale di 1280 pixel, una linea orizzontale di 96 pixel estende 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 dell'applicazione è abilitato e l'applicazione non è compatibile con 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 dpi su 120, ma esegue il ridimensionamento quando il valore DPI è impostato su un valore personalizzato pari o superiore a 144. Tuttavia, l'utente può eseguire l'override del comportamento predefinito.

 

Il ridimensionamento dello schermo crea nuove sfide per le applicazioni interessate in qualsiasi modo con le coordinate dello schermo. La schermata contiene ora due sistemi di coordinate: fisici e logici. Le coordinate fisiche di un punto sono l'offset effettivo in pixel dall'angolo superiore sinistro del punto di origine. Le coordinate logiche rappresentano gli offset che si avrebbero se i pixel stessi 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 con il valore predefinito di 96 dpi, il pulsante si trova in corrispondenza delle coordinate fisiche (100, 48). A 120 dpi, si trova a coordinate fisiche di (125, 60). Ma 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 funzioneGetCursorPosrestituisce 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.

Scalabilità nei client di automazione interfaccia utente

L'API di 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, le applicazioni di automazione interfaccia utente 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 all'esterno dell'area client.

La soluzione ha due parti.

Per prima cosa, rendere l'applicazione client consapevole del dpi. 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 funzionegetPhysicalCursorPos.