다음을 통해 공유


텍스트 서식 지정(GDI+)

텍스트에 특수 서식을 적용하려면 StringFormat 개체를 초기화하고 해당 개체의 주소를 Graphics 클래스의 DrawString 메서드에 전달합니다.

서식이 지정된 텍스트를 사각형에 그리려면 그래픽, FontFamily, Font, RectF, StringFormatBrush 개체가 필요합니다.

텍스트 맞춤

다음 예제에서는 사각형에 텍스트를 그립니다. 각 텍스트 줄은 가운데(좌우)이며 전체 텍스트 블록은 사각형의 가운데(위쪽에서 아래쪽)입니다.

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

다음 그림에서는 사각형과 가운데 맞춤 텍스트를 보여 줍니다.

가로 가운데에 6줄의 텍스트가 포함된 사각형이 포함된 창의 스크린샷

앞의 코드는 StringFormat 개체의 두 메서드인 StringFormat::SetAlignmentStringFormat::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);
            

다음 그림에서는 탭 텍스트를 보여 줍니다.

텍스트 열 4개를 포함하는 사각형 그림 각 열이 왼쪽에 올파인됨

앞의 코드는 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);
            

다음 그림에서는 세로 텍스트를 보여 줍니다.

시계 방향으로 90도 회전된 텍스트를 포함하는 창을 보여 주는 그림