Comme il est indiqué dans la documentation sur les contrôles statiques, http://msdn.microsoft.com/en-us/library/ms997560.aspx , l'affichage du texte est réalisé, en sous-main, par l'une des trois fonctions :
- TextOut si SS_SIMPLE sans SS_NOPREFIX
- ExtTextOut, si SS_SIMPLE avec SS_NO_PREFIX
- DrawText, dans les autres cas.
Le cas le plus courant est le dernier. Pour connaitre la taille occupée par un DrawText, il y a un moyen qui est l'utisation de DrawTextEx avec le paramètre DT_CALCRECT. Voir la doc http://msdn.microsoft.com/en-us/li [...] S.85).aspx . Quand DrawTextEx est utilisée avec DT_CALCRECT, le texte n'est pas affiché, il y a seulement la taille du rectangle englobant, qui est calculée.
Si c'est un TextOut, alors la même solution devrait marcher aussi, ou bien on peut utiliser GetTextExtentPoint32, ou on peut additionner soi-même la taille de chaque caractère que l'on aura récupéré avec GetCharABCWidths.
Je conseille le DrawTextEx avec DT_CALCRECT. Je l'ai testé et il marche bien.
Cependant, je crois, mais je n'en suis pas certain, qu'il y aura un petit travail supplémentaire à faire, qui est de sélectionner la bonne police de caractères au préalable (comme d'habitude, par exemple avec un CreateFont et ses 14 paramètres, et un SelectObject), et encore avant cela, il faudra récupérer la police système et la taille par défaut pour les contrôles statiques.