Share via


텍스트 서식 및 레이아웃

DirectWrite 텍스트 서식 지정을 위한 두 가지 인터페이스인 IDWriteTextFormatIDWriteTextLayout을 제공합니다. IDWriteTextFormat 은 텍스트의 형식만 설명하고 전체 문자열이 동일한 글꼴 크기, 스타일, 가중치 등인 경우에 사용됩니다. 반면 에 IDWriteTextLayout 은 텍스트 문자열과 지정된 문자열 범위의 서식을 모두 캡슐화합니다. 이 문서에서는 각 인터페이스 및 해당 용도에 대해 설명합니다. 이러한 인터페이스의 생성 및 메서드에 대한 자세한 내용은 IDWriteTextFormatIDWriteTextLayout 참조 페이지를 참조하세요.

이 문서에는 다음 부분이 포함되어 있습니다.

IDWriteTextFormat

IDWriteTextFormat 개체는 다음을 위해 사용됩니다.

  • 렌더링할 때 전체 문자열의 형식을 설명합니다. 여러 형식의 문자열을 렌더링하려면 IDWriteTextLayout 개체를 사용합니다.
  • IDWriteTextLayout 개체를 만들 때 기본 텍스트 형식을 지정합니다.

IDWriteTextFormat 개체를 만들려면 IDWriteFactory::CreateTextFormat 메서드를 사용하고 글꼴 패밀리, 글꼴 컬렉션, 글꼴 두께, 글꼴 크기(DIP), 로캘 이름을 지정합니다.

IDWriteTextFormat 수정

IDWriteTextFormat 인터페이스가 만들어지면 글꼴 패밀리, 컬렉션, 가중치 및 크기, 로캘 이름 등 일부 값을 변경할 수 없습니다. 이러한 값을 변경하려면 새 IDWriteTextFormat 개체를 만들어야 합니다.

IDWriteTextLayout 을 사용하면 아무 것도 다시 생성하지 않고 위의 속성을 변경할 수 있습니다. IDWriteTextFormat 을 사용하면 텍스트 맞춤과 같이 전체 텍스트에 적용되는 서식을 변경할 수 있습니다. 특정 문자 범위에 서식을 적용하려면 IDWriteTextLayout을 사용하여 서식을 적용해야 합니다.

IDWriteTextFormat 은 텍스트 맞춤, 흐름 방향, 증분 탭 정지, 줄 간격, 단락 맞춤, 트리밍 및 단어 줄 바꿈을 설정하는 메서드를 제공합니다. 이러한 속성은 IDWriteTextFormat 개체를 만든 후 언제든지 변경할 수 있습니다.

IDWriteTextLayout

IDWriteTextLayout 인터페이스는 IDWriteTextFormat과 달리 텍스트 블록과 연결된 서식을 모두 나타냅니다. IDWriteTextFormat 은 초기 서식 정보를 나타냅니다. 다음 예제에서는 IDWriteFactory::CreateTextLayout을 사용하여 IDWriteTextLayout 개체를 만드는 방법을 보여 줍니다.

// Create a text layout using the text format.
if (SUCCEEDED(hr))
{
    RECT rect;
    GetClientRect(hwnd_, &rect); 
    float width  = rect.right  / dpiScaleX_;
    float height = rect.bottom / dpiScaleY_;

    hr = pDWriteFactory_->CreateTextLayout(
        wszText_,      // The string to be laid out and formatted.
        cTextLength_,  // The length of the string.
        pTextFormat_,  // The text format to apply to the string (contains font information, etc).
        width,         // The width of the layout box.
        height,        // The height of the layout box.
        &pTextLayout_  // The IDWriteTextLayout interface pointer.
        );
}

개체를 만든 후에는 IDWriteTextLayout 개체의 텍스트를 변경할 수 없습니다. 텍스트를 변경하려면 기존 개체를 삭제하고 새 IDWriteTextLayout 개체를 만들어야 합니다.

IDWriteTextLayout을 사용하여 지정된 텍스트 범위의 서식을 지정할 수 있습니다. 또한 IDWriteTextLayout 은 글꼴 스타일 및 두께를 변경하고 OpenType 글꼴 기능 및 적중 테스트를 추가하는 메서드를 제공합니다. 자세한 내용과 전체 메서드 목록은 IDWriteTextLayout 참조 페이지를 참조하세요.

텍스트 범위 서식 지정

IDWriteTextLayout 은 텍스트 범위의 서식을 지정하는 여러 메서드를 제공합니다. 이러한 각 메서드는 DWRITE_TEXT_RANGE 구조를 매개 변수로 사용하여 문자열 내의 시작 텍스트 위치와 서식을 지정할 범위의 길이를 지정합니다. 다음 예제에서는 텍스트 범위의 글꼴 두께를 굵게 설정하는 방법을 보여줍니다.

// Set the font weight to bold for the first 5 letters.
DWRITE_TEXT_RANGE textRange = {0, 5};

if (SUCCEEDED(hr))
{
    hr = pTextLayout_->SetFontWeight(DWRITE_FONT_WEIGHT_BOLD, textRange);
}

렌더링 옵션

IDWriteTextFormat 개체에서만 설명하는 서식이 있는 텍스트는 Direct2D로 렌더링할 수 있지만 IDWriteTextLayout 개체를 렌더링하는 몇 가지 옵션이 더 있습니다.

IDWriteTextLayout 개체에서 설명하는 문자열은 아래 메서드를 사용하여 렌더링할 수 있습니다.

  1. Direct2D를 사용하여 렌더링합니다.
  2. 사용자 지정 텍스트 렌더러를 사용하여 렌더링합니다.
  3. GDI 표면으로 렌더링합니다.