다음을 통해 공유


텍스트 서식 지정(GDI+)

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

직사각형에 서식이 지정된 텍스트를 그리려면 그래픽 , FontFamily, 글꼴, 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);
            

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

가로.

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

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

텍스트가 네 개의 열로 구성된 사각형의 그림입니다. 각 열은 왼쪽으로 정렬되어 있습니다.

앞의 코드는 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도 회전된 텍스트를 포함하는 창을 보여 주는 그림