Rileva le dimensioni del carattere di Windows (100%, 125%, 150%)

Ho creato un’applicazione che funziona perfettamente fino a quando l’utente 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.

Questo funzionava benissimo finché le persone con le versioni cinesi di Windows 7 hanno iniziato a usare la mia applicazione. L’intera applicazione si interrompe sulle windows 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 inglesi di Windows 7 funziona benissimo, ma in qualche modo le versioni cinesi saltano proprio da questo, e il modulo si distrugge da solo, con i controlli che non vengono visualizzati, font estremamente grande e che supera il problema, le caselle di immagine vengono spostate.

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.

Il modo corretto di gestire le impostazioni DPI variabili non è quello di rilevarle e regolare manualmente le dimensioni dei controlli in un’istruzione switch (per i principianti, ci sono molte più possibilità di quelle mostrate nella dichiarazione di esempio).

Invece, dovresti impostare la proprietà AutoScaleMode del tuo modulo su AutoScaleMode.Dpi e lasciare che il framework si prenda cura di questo per te.

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

 this.AutoScaleMode = AutoScaleMode.Dpi; 

Sebbene tu preferisca usare AutoScaleMode.Font . Per ulteriori informazioni sul ridimensionamento automatico, consultare la documentazione MSDN .

Per gli utenti C ++ / Win32, ecco un buon riferimento: scrivere applicazioni Win32 ad alta DPI .