텍스트 서식 지정(GDI+)
텍스트에 특수 서식을 적용하려면 StringFormat 개체를 초기화하고 해당 개체의 주소를 Graphics 클래스의 DrawString 메서드에 전달합니다.
서식이 지정된 텍스트를 사각형에 그리려면 그래픽, FontFamily, Font, RectF, StringFormat 및 Brush 개체가 필요합니다.
텍스트 맞춤
다음 예제에서는 사각형에 텍스트를 그립니다. 각 텍스트 줄은 가운데(좌우)이며 전체 텍스트 블록은 사각형의 가운데(위쪽에서 아래쪽)입니다.
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);
다음 그림에서는 사각형과 가운데 맞춤 텍스트를 보여 줍니다.
앞의 코드는 StringFormat 개체의 두 메서드인 StringFormat::SetAlignment 및 StringFormat::SetLineAlignment를 호출합니다. StringFormat::SetAlignment 호출은 각 텍스트 줄이 DrawString 메서드에 전달된 세 번째 인수에 의해 지정된 사각형의 가운데에 배치되도록 지정합니다. StringFormat::SetLineAlignment를 호출하면 텍스트 블록이 사각형의 가운데(위쪽에서 아래쪽)로 지정됩니다.
StringAlignmentCenter 값은 Gdiplusenums.h로 선언된 StringAlignment 열거형의 요소입니다.
탭 중지 설정
StringFormat 개체의 StringFormat::SetTabStops 메서드를 호출한 다음 해당 StringFormat 개체의 주소를 Graphics 클래스의 DrawString 메서드에 전달하여 텍스트에 대한 탭 정지를 설정할 수 있습니다.
다음은 탭 정지를 150, 250, 350으로 설정하는 예제입니다. 그런 다음 코드는 이름과 테스트 점수의 탭 목록을 표시합니다.
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);
다음 그림에서는 탭 텍스트를 보여 줍니다.
앞의 코드는 StringFormat::SetTabStops 메서드에 세 개의 인수를 전달합니다. 세 번째 인수는 탭 오프셋을 포함하는 배열의 주소입니다. 두 번째 인수는 해당 배열에 세 개의 오프셋이 있음을 나타냅니다. StringFormat::SetTabStops에 전달된 첫 번째 인수는 0이며, 이는 배열의 첫 번째 오프셋이 경계 사각형의 왼쪽 가장자리인 위치 0에서 측정됨을 나타냅니다.
세로 텍스트 그리기
StringFormat 개체를 사용하여 텍스트를 가로가 아닌 세로로 그리도록 지정할 수 있습니다.
다음 예제에서는 StringFormatFlagsDirectionVertical 값을 StringFormat 개체의 StringFormat::SetFormatFlags 메서드에 전달합니다. 해당 StringFormat 개체의 주소는 Graphics 클래스의 DrawString 메서드에 전달됩니다. StringFormatFlagsDirectionVertical 값은 Gdiplusenums.h에 선언된 StringFormatFlags 열거형의 요소입니다.
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);
다음 그림에서는 세로 텍스트를 보여 줍니다.