Condividi tramite


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.

schermata di una finestra contenente un rettangolo, che contiene sei righe di testo, centrate orizzontalmente

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.

illustrazione di un rettangolo contenente quattro colonne di testo; ogni colonna è sinistra-alligned

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.

figura che mostra una finestra contenente testo ruotato a 90 gradi in senso orario