2011-11-03 15 views
5

Abbiamo riscontrato un problema con una delle nostre applicazioni basate su Win32 MFC. Non viene visualizzato correttamente sui display che utilizzano impostazioni ad alta risoluzione. Più specificatamente in Windows XP con 120 dpi selezionati, ci sono diversi posti nell'app in cui il testo si riduce ma non i loro contenitori (il testo trabocca i limiti del suo pulsante, ecc.). Ciò si verifica anche in Windows 7 (e Vista) quando è selezionato> 96 dpi e viene selezionato "usa ridimensionamento dpi in stile XP". Se il ridimensionamento in stile xp non è selezionato, capisco che Win7 utilizza invece la virtualizzazione DPI. Tutto sembra a posto quando si utilizza la virtualizzazione DPI (Ok le cose sono sfocate ma almeno sono corrette). Di default in Win7 120 dpi usa il ridimensionamento in stile xp e l'impostazione successiva (144 dpi) no. Quindi la nostra app sembra corretta a 144 dpi ma sbagliata a 120 dpi.Applicazione Windows - Problemi DPI

Se modifico il manifest dell'applicazione per dichiarare l'app come "DPI aware", allora questo passaggio della virtualizzazione DPI (ma non il ridimensionamento in dpi style XP) e questo non mi consente di capire dove. Le cose sembrano ancora pessime (nessun cambiamento per 120 dpi, 144 dpi ora rotto).

Ho bisogno di risolvere questo problema e ho provato a leggere su DPI/problemi di ridimensionamento in generale ed è stata un'esperienza di apprendimento. Finora non ho trovato una soluzione adeguata. Al momento non ho intenzione di fare una correzione accurata e corretta (l'app ridimensiona correttamente tutti gli elementi in base al dpi). Ciò comporterebbe MOLTA riscrittura. Penso che ci siano davvero due soluzioni possibili. Uno è disattivare qualsiasi tipo di ridimensionamento DPI tutti insieme. Ciò significherebbe che se un sistema Win7 degli utenti fosse impostato su 120 dpi, tutto sul loro sistema sarebbe bello/grande, ma la nostra app apparirebbe corretta ma sarebbe piccola rispetto a qualsiasi altra applicazione. La seconda soluzione sarebbe quella di forzare la nostra app a utilizzare la virtualizzazione DPI, ma a non utilizzare mai il ridimensionamento in dpi style XP. Voglio che questo sia un cambio di lato dell'applicazione e non fare affidamento sugli utenti finali per dover apportare modifiche alla configurazione di Windows.

Finora non ho trovato un modo per realizzare nessuna delle due soluzioni.

Può qualcuno più esperto su questo argomento rispondere e indicarmi nel modo giusto?

Grazie

+1

Il problema è nel codice di layout o nel codice di disegno? Ad esempio, il problema è che stai facendo pulsanti e altri controlli standard x per y pixel, oppure il problema è che hai un codice che disegna i tuoi controlli (ad esempio, utilizzando le chiamate GDI) con dimensioni fisse? Come stai facendo il tuo layout? Forme? Modelli di dialogo? Codice personalizzato? –

+0

Qui non c'è magia, dovrai solo ingrandire le finestre. O i tuoi caratteri più piccoli, scegli il tuo veleno. –

risposta

2

Non si può forzare DPI virtualizzazione su 120 impostazioni DPI. Ho studiato questo per un prodotto me stesso perché avere l'aspetto fuzzy in alto DPI sembrava un buon compromesso.

Abbiamo finito per eseguire una riscrittura completa del posizionamento e del ridimensionamento dell'interfaccia utente per farlo scalare correttamente con il ridimensionamento dei caratteri nelle impostazioni DPI elevate. Il client è ora pienamente consapevole DPI e si adatta correttamente in qualsiasi impostazione DPI.

Il lavoro per farlo correttamente ha richiesto a un ragazzo ~ 3 mesi nel nostro caso per un cliente piuttosto complesso.

Avevamo un piano secondario che non abbiamo mai provato ma potrebbe funzionare per voi: All'avvio leggere il fattore di ridimensionamento DPI del sistema operativo. Quindi riduci tutte le istanze di font che hai con questo fattore in modo che, quando Windows ridimensiona nuovamente i font, siano tornati alle dimensioni in cui l'interfaccia utente può adattarli. Ovviamente gli utenti con impostazioni DPI elevate non otterranno font più grandi nella tua applicazione, ma saranno almeno utilizzabili.

Problemi correlati