Freigeben über


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.

Screenshot eines Fensters mit einem Rechteck, das sechs Textzeilen enthält, horizontal zentriert

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.

Abbildung eines Rechtecks mit vier Textspalten; Jede Spalte ist linksseitig ausgerichtet.

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.

Abbildung eines Fensters mit um 90 Grad gedrehter Text im Uhrzeigersinn