텍스트 서식 및 레이아웃
DirectWrite 텍스트 서식 지정을 위한 두 가지 인터페이스인 IDWriteTextFormat 및 IDWriteTextLayout을 제공합니다. IDWriteTextFormat 은 텍스트의 형식만 설명하고 전체 문자열이 동일한 글꼴 크기, 스타일, 가중치 등인 경우에 사용됩니다. 반면 에 IDWriteTextLayout 은 텍스트 문자열과 지정된 문자열 범위의 서식을 모두 캡슐화합니다. 이 문서에서는 각 인터페이스 및 해당 용도에 대해 설명합니다. 이러한 인터페이스의 생성 및 메서드에 대한 자세한 내용은 IDWriteTextFormat 및 IDWriteTextLayout 참조 페이지를 참조하세요.
이 문서에는 다음 부분이 포함되어 있습니다.
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 개체에서 설명하는 문자열은 아래 메서드를 사용하여 렌더링할 수 있습니다.