2012-02-21 11 views
37

Ho creato un'applicazione che funziona perfettamente finché l'utente non seleziona il 125% o il 150%. Romperebbe la mia domanda. In seguito ho trovato un modo per trovare la dimensione del carattere rilevando il DPI.Rileva dimensioni carattere Windows (100%, 125%, 150%)

Questo funzionava benissimo finché le persone con versioni cinesi di Windows 7 hanno iniziato a utilizzare la mia applicazione. L'intera applicazione si interrompe sulle finestre cinesi 7. Da quello che posso dire (non posso davvero provarlo perché ho solo la versione inglese e l'installazione dei language pack non causa il problema) I caratteri cinesi stanno causando uno strano DPI che infrange la mia applicazione.

il mio codice attuale funziona così:

if (dpi.DpiX == 120) //For 125% fonts 
{ 
    //Resize form and set default font to correct problems 
} 
else if (dpi.DpiX == 96) //For 100 and 150% fonts 
{ 
    //Resize form and set default font to correct problems 
} 

Nelle versioni in inglese di Windows 7 che funziona grande, ma le versioni in qualche modo cinesi saltare proprio da questo, e la forma stessa distrugge, con i controlli nemmeno presentarsi, il carattere è estremamente grande e supera il problema, spostando le caselle di immagine.

Quindi, qual è un buon modo per rilevare la scala dei caratteri di Windows (100%, 125% e 150%) senza rilevare l'API? Ho bisogno di qualcosa di solido che funzioni su tutti i sistemi operativi e le lingue di Windows 7.

+0

Stavo digitando molto velocemente e ho fatto alcuni errori di ortografia. Volevo dire "DPI" non "API". Scusa –

+0

Quello che descrivi sembra molto più un problema con il driver video e/o i font installati ... – Yahia

+0

Solo suggession: se hai un serio utilizzo di client cinesi, vale la pena investire del tempo per creare almeno 'VirtualMachine' per 'VirtualBox' o' VmWare', quindi puoi testare la tua app su di essa con la fedeltà più fedele al sistema operativo reale, come è possibile. – Tigran

risposta

16

Il modo corretto di gestire le impostazioni DPI variabili non è rilevarle e regolare manualmente le dimensioni dei controlli in un'istruzione switch (per gli utenti iniziali, ci sono molte più possibilità rispetto a quelle mostrate nell'istruzione campione if).

Invece, dovresti impostare AutoScaleMode property del modulo su AutoScaleMode.Dpi e lasciare che il framework si occupi di questo per te.

Aggiungere il seguente codice al costruttore del modulo (o impostare questa proprietà in fase di progettazione):

this.AutoScaleMode = AutoScaleMode.Dpi; 

Anche se si potrebbe preferisce utilizzare AutoScaleMode.Font. Per ulteriori informazioni sul ridimensionamento automatico, vedere the MSDN documentation.

+1

Ho provato a farlo, ma il problema è che la mia applicazione ha problemi con quello –

+1

@user Che cosa significa "guasta"? Cosa va esattamente storto? Come hai provato a debuggarlo?Usi il posizionamento relativo per i tuoi controlli, ad esempio posizionandoli in contenitori e impostando le proprietà 'Anchor' e' Dock'? Il posizionamento assoluto non funzionerà mai, anche quando l'utente cambia il tipo e la dimensione del carattere predefinito, molto meno quando viene coinvolto DPI. –

+8

utilizzando AutoScaleMode.none risolto il mio problema! –

Problemi correlati