Ho un'applicazione C# che esegue il rendering del testo, qualcosa alla pari con un semplice editor di testo wysiwyg.TextRenderer.DrawText rende Arial in modo diverso su XP vs Vista
Sto utilizzando TextRenderer.DrawText per eseguire il rendering del testo sullo schermo e GetTextExtentPoint32 per misurare il testo in modo da poter posizionare stili di carattere/dimensioni diversi sulla stessa riga.
In Vista tutto funziona correttamente. In XP, tuttavia, Arial esegue il rendering in modo diverso, alcuni caratteri come "o" e "b" occupano più spazio rispetto a Vista. GetTextExtentPoint32 sembra misurare la stringa come se fosse in Vista, con le larghezze più piccole. Il risultato finale è che ogni tanto una sequenza di testo si sovrappone al testo che lo precede perché il testo precedente viene misurato più piccolo di quanto non sia effettivamente sullo schermo.
Inoltre, il mio codice di rendering del testo simula il rendering del testo esatto (per la semplice formattazione e solo la lingua inglese) e cioè il rendering del testo sembra essere coerente tra vista e xp - è così che ho notato il cambiamento di dimensioni dei diversi caratteri.
Qualcuno ha qualche idea su cosa sta succedendo?
In breve, TextRenderer.DrawText e GetTextExtentPoint32 non corrispondono in xp per Arial. DrawText sembra disegnare alcuni caratteri più grandi e/o più piccoli rispetto a Vista, ma GetTextExtentPoint32 sembra misurare il testo come sarebbe in Vista (che sembra corrispondere al rendering del testo in cioè su entrambi xp e vista). Spero che abbia un senso.
Nota: sfortunatamente TextRenderer.MeasureString non è veloce o preciso per soddisfare i miei requisiti. Ho provato a usarlo e ho dovuto strapparlo.
+1 Perché so a cosa ti stai occupando! E ho solo dovuto occuparmi di caratteri a larghezza fissa. – leppie
Sei sicuro che non sia un tipo di problema DPI o Cleartype? –