Partager via


Mise en forme du texte (GDI+)

Pour appliquer une mise en forme spéciale au texte, initialisez un objet StringFormat et passez l’adresse de cet objet à la méthode DrawString de la classe Graphics .

Pour dessiner du texte mis en forme dans un rectangle, vous avez besoin d’objets Graphics, FontFamily, Font, RectF, StringFormat et Brush .

Alignement du texte

L’exemple suivant dessine du texte dans un rectangle. Chaque ligne de texte est centrée (d’un côté à l’autre), et l’ensemble du bloc de texte est centré (de haut en bas) dans le rectangle.

WCHAR string[] = 
   L"Use StringFormat and RectF objects to center text in a rectangle.";
                       
FontFamily   fontFamily(L"Arial");
Font         font(&fontFamily, 12, FontStyleBold, UnitPoint);
RectF        rectF(30.0f, 10.0f, 120.0f, 140.0f);
StringFormat stringFormat;
SolidBrush   solidBrush(Color(255, 0, 0, 255));

// Center-justify each line of text.
stringFormat.SetAlignment(StringAlignmentCenter);

// Center the block of text (top to bottom) in the rectangle.
stringFormat.SetLineAlignment(StringAlignmentCenter);

graphics.DrawString(string, -1, &font, rectF, &stringFormat, &solidBrush);

Pen pen(Color(255, 0, 0, 0));
graphics.DrawRectangle(&pen, rectF);
            

L’illustration suivante montre le rectangle et le texte centré.

capture d’écran d’une fenêtre contenant un rectangle, qui contient six lignes de texte, centré horizontalement

Le code précédent appelle deux méthodes de l’objet StringFormat : StringFormat::SetAlignment et StringFormat::SetLineAlignment. L’appel à StringFormat::SetAlignment spécifie que chaque ligne de texte est centrée dans le rectangle donné par le troisième argument passé à la méthode DrawString . L’appel à StringFormat::SetLineAlignment spécifie que le bloc de texte est centré (de haut en bas) dans le rectangle.

La valeur StringAlignmentCenter est un élément de l’énumération StringAlignment , qui est déclarée dans Gdiplusenums.h.

Définition des taquets de tabulation

Vous pouvez définir des taquets de tabulation pour le texte en appelant la méthode StringFormat::SetTabStops d’un objet StringFormat , puis en transmettant l’adresse de cet objet StringFormat à la méthode DrawString de la classe Graphics .

L’exemple suivant définit des taquets de tabulation à 150, 250 et 350. Ensuite, le code affiche une liste à onglets de noms et de scores de test.

WCHAR string[150] = 
   L"Name\tTest 1\tTest 2\tTest 3\n";

StringCchCatW(string, 150, L"Joe\t95\t88\t91\n");
StringCchCatW(string, 150, L"Mary\t98\t84\t90\n");
StringCchCatW(string, 150, L"Sam\t42\t76\t98\n");
StringCchCatW(string, 150, L"Jane\t65\t73\t92\n");
                       
FontFamily   fontFamily(L"Courier New");
Font         font(&fontFamily, 12, FontStyleRegular, UnitPoint);
RectF        rectF(10.0f, 10.0f, 450.0f, 100.0f);
StringFormat stringFormat;
SolidBrush   solidBrush(Color(255, 0, 0, 255));
REAL         tabs[] = {150.0f, 100.0f, 100.0f};

stringFormat.SetTabStops(0.0f, 3, tabs);

graphics.DrawString(string, -1, &font, rectF, &stringFormat, &solidBrush);

Pen pen(Color(255, 0, 0, 0));
graphics.DrawRectangle(&pen, rectF);
            

L’illustration suivante montre le texte à onglets.

illustration d’un rectangle contenant quatre colonnes de texte ; chaque colonne est alignée à gauche

Le code précédent transmet trois arguments à la méthode StringFormat::SetTabStops . Le troisième argument est l’adresse d’un tableau contenant les décalages d’onglet. Le deuxième argument indique qu’il existe trois décalages dans ce tableau. Le premier argument passé à StringFormat::SetTabStops est 0, ce qui indique que le premier décalage du tableau est mesuré à partir de la position 0, le bord gauche du rectangle englobant.

Dessin de texte vertical

Vous pouvez utiliser un objet StringFormat pour spécifier que le texte doit être dessiné verticalement plutôt qu’horizontalement.

L’exemple suivant transmet la valeur StringFormatFlagsDirectionVertical à la méthode StringFormat::SetFormatFlags d’un objet StringFormat . L’adresse de cet objet StringFormat est passée à la méthode DrawString de la classe Graphics . La valeur StringFormatFlagsDirectionVertical est un élément de l’énumération StringFormatFlags , qui est déclarée dans Gdiplusenums.h.

WCHAR string[] = L"Vertical text";
                     
FontFamily   fontFamily(L"Lucida Console");
Font         font(&fontFamily, 14, FontStyleRegular, UnitPoint);
PointF       pointF(40.0f, 10.0f);
StringFormat stringFormat;
SolidBrush   solidBrush(Color(255, 0, 0, 255));

stringFormat.SetFormatFlags(StringFormatFlagsDirectionVertical);

graphics.DrawString(string, -1, &font, pointF, &stringFormat, &solidBrush);
            

L’illustration suivante montre le texte vertical.

illustration montrant une fenêtre qui contient du texte pivoté de 90 degrés dans le sens des aiguilles d’une montre