Comment obtenir les dimensions réelles de texte quand ClearType est?
Question
J'ai une application GUI Win32 qui utilise GDI havily. Il doit dessiner le texte sur une image bitmap aux coordonnées spécifiées, puis l'effacer et remplacer le bitmap d'origine.
Procédez comme suit:
- sélectionnez la police (GetStockObject (DEFAULT_GUI_FONT)), une brosse, d'autres choses dans le contexte de l'appareil
- appelez GetTextExtentPoint32 () pour calculer la taille du texte
- ayant maintenant le point de départ du texte que je peux calculer le rectangle de texte attendu et le stocker
- appelez TextOut () pour le même contexte de l'appareil avec le même point de départ et le même texte
et plus tard restaurer le bitmap pour le rectangle du magasin.
Il fonctionne très bien quand ClearType anticrénelage est éteint. Mais avec ClearType la taille retournée par GetTextExtentPoint32 () est légèrement inférieure à la taille réellement occupée par le texte quand TextOut () est appelée. Alors, quand je ramènerai plus tard, le bitmap d'origine quelques petites bandes du texte restent en place et je artefacts.
Y at-il remède à cela sans désactiver ClearType?
La solution
Vous pouvez également essayer DrawText avec DT_CALCRECT pour calculer la taille de la chaîne. Peut-être que cela fonctionne mieux.
Aussi, vous pouvez alors écrire la chaîne avec DrawText dans un rectangle avec les dimensions égales à celle que vous obtenez avec DT_CALCRECT et il coupera le texte dans le cas où il est un peu plus grand.