Formattazione del testo (GDI+)
Per applicare la formattazione speciale al testo, inizializzare un oggetto StringFormat e passare l'indirizzo di tale oggetto al metodo DrawString della classe Graphics .
Per disegnare testo formattato in un rettangolo, sono necessari oggetti Graphics, FontFamily, Font, RectF, StringFormat e Brush.
Allineamento del testo
Nell'esempio seguente viene disegnato testo in un rettangolo. Ogni riga di testo viene centrata (lato a lato) e l'intero blocco di testo viene centrato (in alto verso il basso) nel rettangolo.
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);
La figura seguente mostra il rettangolo e il testo centrato.
Il codice precedente chiama due metodi dell'oggetto StringFormat: StringFormat::SetAlignment e StringFormat::SetLineAlignment. La chiamata a StringFormat::SetAlignment specifica che ogni riga di testo viene centrata nel rettangolo specificato dal terzo argomento passato al metodo DrawString . La chiamata a StringFormat::SetLineAlignment specifica che il blocco di testo viene centrato (in alto verso il basso) nel rettangolo.
Il valore StringAlignmentCenter è un elemento dell'enumerazione StringAlignment , dichiarata in Gdiplusenums.h.
Impostazione delle tabulazioni
È possibile impostare le tabulazioni per il testo chiamando il metodo StringFormat::SetTabStops di un oggetto StringFormat e quindi passando l'indirizzo dell'oggetto StringFormat al metodo DrawString della classe Graphics.
L'esempio seguente imposta tabulazioni a 150, 250 e 350. Il codice visualizza quindi un elenco a schede di nomi e punteggi di 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);
La figura seguente mostra il testo a schede.
Il codice precedente passa tre argomenti al metodo StringFormat::SetTabStops . Il terzo argomento è l'indirizzo di una matrice contenente gli offset della scheda. Il secondo argomento indica che sono presenti tre offset in tale matrice. Il primo argomento passato a StringFormat::SetTabStops è 0, che indica che il primo offset della matrice viene misurato dalla posizione 0, dal bordo sinistro del rettangolo di selezione.
Disegno di testo verticale
È possibile usare un oggetto StringFormat per specificare che il testo viene disegnato verticalmente anziché orizzontalmente.
Nell'esempio seguente viene passato il valore StringFormatFlagsDirectionVertical al metodo StringFormat::SetFormatFlags di un oggetto StringFormat . L'indirizzo dell'oggetto StringFormat viene passato al metodo DrawString della classe Graphics . Il valore StringFormatFlagsDirectionVertical è un elemento dell'enumerazione StringFormatFlags , dichiarata in Gdiplusenumenums.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);
La figura seguente mostra il testo verticale.