Formatieren von Text (GDI+)
Um spezielle Formatierungen auf Text anzuwenden, initialisieren Sie ein StringFormat-Objekt , und übergeben Sie die Adresse dieses Objekts an die DrawString-Methode der Graphics-Klasse .
Um formatierten Text in einem Rechteck zu zeichnen, benötigen Sie Die Objekte Graphics, FontFamily, Font, RectF, StringFormat und Brush .
Ausrichten von Text
Das folgende Beispiel zeichnet Text in einem Rechteck. Jede Textzeile wird zentriert (von Seite zu Seite) und der gesamte Textblock (von oben nach unten) im Rechteck zentriert.
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);
Die folgende Abbildung zeigt das Rechteck und den zentrierten Text.
Der vorangehende Code ruft zwei Methoden des StringFormat-Objekts auf: StringFormat::SetAlignment und StringFormat::SetLineAlignment. Der Aufruf von StringFormat::SetAlignment gibt an, dass jede Textzeile in dem Rechteck zentriert wird, das vom dritten Argument angegeben wird, das an die DrawString-Methode übergeben wird. Der Aufruf von StringFormat::SetLineAlignment gibt an, dass der Textblock im Rechteck zentriert (von oben nach unten) ist.
Der Wert StringAlignmentCenter ist ein Element der StringAlignment-Enumeration , die in Gdiplusenums.h deklariert wird.
Festlegen von Tabstopps
Sie können Tabstopps für Text festlegen, indem Sie die StringFormat::SetTabStops-Methode eines StringFormat-Objekts aufrufen und dann die Adresse dieses StringFormat-Objekts an die DrawString-Methode der Graphics-Klasse übergeben.
Im folgenden Beispiel werden Tabstopps auf 150, 250 und 350 festgelegt. Anschließend zeigt der Code eine Registerkartenliste mit Namen und Testergebnissen an.
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);
Die folgende Abbildung zeigt den Text im Registerkartenformat.
Der vorangehende Code übergibt drei Argumente an die StringFormat::SetTabStops-Methode . Das dritte Argument ist die Adresse eines Arrays, das die Registerkartenoffsets enthält. Das zweite Argument gibt an, dass in diesem Array drei Offsets vorhanden sind. Das erste an StringFormat::SetTabStops übergebene Argument ist 0, was angibt, dass der erste Offset im Array von Position 0, dem linken Rand des umgebenden Rechtecks, gemessen wird.
Zeichnen von vertikalem Text
Sie können ein StringFormat-Objekt verwenden, um anzugeben, dass Text nicht horizontal, sondern vertikal gezeichnet werden soll.
Im folgenden Beispiel wird der Wert StringFormatFlagsDirectionVertical an die StringFormat::SetFormatFlags-Methode eines StringFormat-Objekts übergeben. Die Adresse dieses StringFormat-Objekts wird an die DrawString-Methode der Graphics-Klasse übergeben. Der Wert StringFormatFlagsDirectionVertical ist ein Element der StringFormatFlags-Enumeration , die in Gdiplusenums.h deklariert wird.
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);
Die folgende Abbildung zeigt den vertikalen Text.