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.
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.
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.