2009-04-28 9 views
2

J'utilise une fonction pour appeler un texte à afficher dans une zone. Le fonctionnement de base de la fonction est:Graphics.MeasureString autorisant trop d'espaces

Dim measureSize as Size 
Do 
    myFont = new Font(myFont.Name, myFont.Size - 1, FontStyle.Regular, GraphicsUnit.Document) 
    'Initial font size is set insanely high for the moment, during testing. 
    'Low initial font size is not the problem. 
    measureSize = g.MeasureString(myString, myFont) 
Loop until (measuredSize.width < desiredSize.width AND measuredSize.height < desiredSize.height) 

Le problème est que MeasureString ajoute beaucoup d'espaces autour de la chaîne, elle dessine, et la police finale est rendue beaucoup trop petite. Je suis sûr que je me souviens d'un argument avec lequel on peut tripoter afin de supprimer tout le rembourrage de la méthode MeasureString, mais mes recherches ne tournent actuellement à rien.

Est-ce que quelqu'un sait comment utiliser MeasureString pour mesurer la taille EXACT de la chaîne sans aucune bordure?

Répondre

0

Vous devriez avoir un essai avec TextRenderer.MeasureText, car il renvoie la taille du texte plutôt que la taille du texte si lissée.

MSDN Article

5

passe StringFormat.GenericTypographic-MeasureString. Je recommande contre TextRenderer parce qu'il a des problèmes avec clear-type lors du rendu à un bitmap en mémoire. L'utilisation de TextRenderer pour la mesure et de DrawString pour le dessin entraînera inévitablement une incohérence tôt ou tard.