Compartir a través de


Formato de texto (GDI+)

Para aplicar formato especial al texto, inicialice un objeto StringFormat y pase la dirección de ese objeto al método DrawString de la clase Graphics .

Para dibujar texto con formato en un rectángulo, necesita objetos Graphics, FontFamily, Font, RectF, StringFormat y Brush .

Alinear texto

En el ejemplo siguiente se dibuja texto en un rectángulo. Cada línea de texto se centra (lateral a lado) y todo el bloque de texto se centra (arriba abajo) en el rectángulo.

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);
            

En la ilustración siguiente se muestra el rectángulo y el texto centrado.

captura de pantalla de una ventana que contiene un rectángulo, que contiene seis líneas de texto, centradas horizontalmente

El código anterior llama a dos métodos del objeto StringFormat : StringFormat::SetAlignment y StringFormat::SetLineAlignment. La llamada a StringFormat::SetAlignment especifica que cada línea de texto se centra en el rectángulo proporcionado por el tercer argumento pasado al método DrawString . La llamada a StringFormat::SetLineAlignment especifica que el bloque de texto se centra (de arriba a abajo) en el rectángulo.

El valor StringAlignmentCenter es un elemento de la enumeración StringAlignment , que se declara en Gdiplusenums.h.

Establecer tabulaciones

Puede establecer tabulaciones para el texto llamando al método StringFormat::SetTabStops de un objeto StringFormat y, a continuación, pasando la dirección de ese objeto StringFormat al método DrawString de la clase Graphics .

En el ejemplo siguiente se establecen posiciones de tabulación en 150, 250 y 350. A continuación, el código muestra una lista con pestañas de nombres y puntuaciones de prueba.

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);
            

En la ilustración siguiente se muestra el texto con pestañas.

ilustración de un rectángulo que contiene cuatro columnas de texto; cada columna está alineada a la izquierda

El código anterior pasa tres argumentos al método StringFormat::SetTabStops . El tercer argumento es la dirección de una matriz que contiene los desplazamientos de tabulación. El segundo argumento indica que hay tres desplazamientos en esa matriz. El primer argumento pasado a StringFormat::SetTabStops es 0, lo que indica que el primer desplazamiento de la matriz se mide desde la posición 0, el borde izquierdo del rectángulo delimitador.

Dibujar texto vertical

Puede usar un objeto StringFormat para especificar que el texto se dibuje verticalmente en lugar de horizontalmente.

En el ejemplo siguiente se pasa el valor StringFormatFlagsDirectionVertical al método StringFormat::SetFormatFlags de un objeto StringFormat . La dirección de ese objeto StringFormat se pasa al método DrawString de la clase Graphics . El valor StringFormatFlagsDirectionVertical es un elemento de la enumeración StringFormatFlags , que se declara en 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);
            

En la ilustración siguiente se muestra el texto vertical.

ilustración en la que se muestra una ventana que contiene texto girado 90 grados en el sentido de las agujas del reloj