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é.
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.
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.