Tutorial d'initiation A la programmation avec l'API Windows
Tutorial d'initiation a la programmation Windows avec Microsoft Visual C++
Chapitre 3Les fenêtres11. Affichage de texte dans une fenêtre
Cours théorique :
Pour afficher du texte dans la zone client d'une fenêtre, il faut posséder un 'handle' sur le contexte d'affichage de cette fenêtre. Le texte qui sera affiché le sera avec la police courante ainsi que les couleurs de premier plan et de fond courantes. Pour afficher du texte, il existe diverses méthodes. La première est d'utiliser la fonction TextOut(). Cette fonction affiche le texte sur une seule ligne, sans jamais calculer de retour à la ligne. Si le texte dépasse la taille de la fenêtre, il sera tronqué. La fonction DrawText() permet quant à elle de définir un rectangle dans lequel le texte doit être écrit. Si le texte dépasse la largeur, il sera mis à la ligne, et ceci autant de fois qu'il faudra.
La position passée pour dessiner le texte correspond par défaut au coin supérieur gauche de la chaîne de texte qui sera dessinée. Le texte sera donc dessiné vers la droite et vers le bas par rapport au point donné. On peut modifier le point de référence pour le positionnement du texte avec la fonction SetTextAlign(). Pour aligner du texte à droite, on pourra par exemple placer ce point dans le coin supérieur droit. Le texte sera donc dessiné à gauche et en bas de la position passée pour dessiner le texte.
Les fonctions SetTextColor() et SetBkColor() permettent de définir les couleurs courantes de premier plan et d'arrière plan pour l'affichage du texte. La fonction SetBkMode() modifie les propriétés du fond (transparent ou opaque). Une fois ces fonctions appelées, le texte dessiné le sera systématiquement avec ces propriétés. Pour dessiner du texte en blanc sur fond noir, il suffira donc d'un seul appel à chacune de ces fonctions. Il faudra faire un nouvel appel pour repasser en texte noir sur fond blanc.
Pour connaître la taille d'un texte à l'écran (en pixels), il faut utiliser la fonction GetTextExtentPoint32(). Cette fonction retourne la taille qu'occupera un texte donné dans un contexte d'affichage donnée. En effet, la taille du texte dépend du contexte d'affichage car la modification de la police entraîne une modification de la taille occupée par le texte. L'utilisation de polices personnalisées sera vue dans le chapitre suivant.
La fonction suivante dessine un texte en rouge centré dans la zone client de la fenêtre spécifiée.
void DrawCenteredText(HWND hWnd,char *text) { HDC hDC; RECT rcClient; GetClientRect(hWnd,&rcClient); hDC=GetDC(hWnd); SetTextColor(hDC,0x000000FF); SetBkMode(hDC,TRANSPARENT); SetTextAlign(hDC,TA_CENTER|TA_TOP); TextOut(hDC,(int)((float)rcClient.right/2),5,text,strlen(text)); ReleaseDC(hWnd,hDC); }
|