[Static Control] NOWORDWRAP

NOWORDWRAP [Static Control] - API Win32 - Programmation

Marsh Posté le 01-09-2010 à 10:38:59    

Bonjour,
 
je cherche à utiliser un contrôle static multi-lignes. L'option SS_LEFTNOWORDWRAP fonctionne bien, j'ai mon texte sur plusieurs lignes.
Cependant je cherche à connaître sur combien de lignes est affiché mon texte dans le contrôle afin d'ajuster la hauteur du contrôle pour que la totalité soit visible.
 
Est ce que vous connaissez un moyen de connaître le nombre de lignes affichées dans le contrôle?
 
Merci beaucoup pour votre aide.

Reply

Marsh Posté le 01-09-2010 à 10:38:59   

Reply

Marsh Posté le 01-09-2010 à 12:12:37    

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.  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed