Formatar texto (GDI+)

Para aplicar formatação especial ao texto, inicialize um objeto StringFormat e passe o endereço desse objeto para o método DrawString da classe Graphics .

Para desenhar texto formatado em um retângulo, você precisa de elementos Graphics, FontFamily, Font, RectF, StringFormat e Brush .

Alinhando texto

O exemplo a seguir desenha texto em um retângulo. Cada linha de texto é centralizada (lado a lado) e todo o bloco de texto é centralizado (de cima para baixo) no retâ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);
            

A ilustração a seguir mostra o retângulo e o texto centralizado.

captura de tela de uma janela que contém um retângulo, que contém seis linhas de texto, centralizada horizontalmente

O código anterior chama dois métodos do objeto StringFormat : StringFormat::SetAlignment e StringFormat::SetLineAlignment. A chamada para StringFormat::SetAlignment especifica que cada linha de texto é centralizada no retângulo fornecido pelo terceiro argumento passado para o método DrawString . A chamada para StringFormat::SetLineAlignment especifica que o bloco de texto é centralizado (de cima para baixo) no retângulo.

O valor StringAlignmentCenter é um elemento da enumeração StringAlignment , que é declarada em Gdiplusenums.h.

Configuração de paradas de tabulação

Você pode definir paradas de tabulação para texto chamando o método StringFormat::SetTabStops de um objeto StringFormat e passando o endereço desse objeto StringFormat para o método DrawString da classe Graphics .

O exemplo a seguir define as paradas de tabulação em 150, 250 e 350. Em seguida, o código exibe uma lista com guias de nomes e pontuações de teste.

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

A ilustração a seguir mostra o texto com guias.

ilustração de um retângulo que contém quatro colunas de texto; cada coluna é alligned à esquerda

O código anterior passa três argumentos para o método StringFormat::SetTabStops . O terceiro argumento é o endereço de uma matriz que contém os deslocamentos de guia. O segundo argumento indica que há três deslocamentos nessa matriz. O primeiro argumento passado para StringFormat::SetTabStops é 0, o que indica que o primeiro deslocamento na matriz é medido da posição 0, a borda esquerda do retângulo delimitador.

Desenho de texto vertical

Você pode usar um objeto StringFormat para especificar que o texto seja desenhado verticalmente em vez de horizontalmente.

O exemplo a seguir passa o valor StringFormatFlagsDirectionVertical para o método StringFormat::SetFormatFlags de um objeto StringFormat . O endereço desse objeto StringFormat é passado para o método DrawString da classe Graphics . O valor StringFormatFlagsDirectionVertical é um elemento da enumeração StringFormatFlags , que é declarada em 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);
            

A ilustração a seguir mostra o texto vertical.

ilustração mostrando uma janela que contém texto girado 90 graus no sentido horário