다음을 통해 공유


텍스트가 올바른 읽기 방향으로 표시되는지 확인

아랍어 및 히브리어와 같은 일부 언어에는 오른쪽에서 왼쪽으로 읽는 방향이 필요합니다. DirectWrite 텍스트 서식 개체의 경우 기본 읽기 방향은 왼쪽에서 오른쪽입니다. DirectWrite는 로캘에서 읽기 방향을 자동으로 유추하지 않으므로 직접 수행해야 합니다.

먼저 windowsx.h에 정의된 GetWindowStyleEx 매크로를 사용하여 텍스트가 렌더링될 창의 확장 스타일 플래그를 가져옵니다.

// Get the window extended style flagsfor the current window.
DWORD dwStyle = GetWindowExStyle(hwnd_);

매크로는 비트 OR 연산과 결합된 여러 플래그로 구성된 DWORD 값을 반환합니다. 읽기 방향에 영향을 주는 특정 플래그가 있는지 확인해야 합니다.

WS_EX_LAYOUTRTL 및 WS_EX_RTLREADING 읽는 방향과 관련된 두 가지 플래그가 있습니다.

dwStyle 변수 및 WS_EX_LAYOUTRTL 매크로와 함께 비트 AND 연산자(&)를 사용하여 레이아웃이 미러 있는지를 나타내는 BOOL 값을 저장합니다.

// Is the WS_EX_LAYOUTRTL flag present?
BOOL bWSLayout = dwStyle & WS_EX_LAYOUTRTL;

WS_EX_RTLREADING 플래그에 대해 동일한 작업을 수행합니다.

// Is the WS_EX_RLTREADING flag present?
BOOL bWSReading = dwStyle & WS_EX_RTLREADING;

IDWriteTextFormat::SetReadingDirection 메서드를 사용하여 읽기 방향을 설정합니다. 기본값은 왼쪽에서 오른쪽으로 설정되므로 오른쪽에서 왼쪽으로만 읽기 방향을 설정하면 됩니다.

참고 항목

전체 레이아웃을 WS_EX_LAYOUTRTL 미러 오른쪽에서 왼쪽으로 읽기 방향을 의미하므로 이러한 플래그 중 하나가 있는 경우에만 읽기 방향을 설정합니다. 둘 다 있는 경우 서로 취소하고 텍스트 형식의 읽기 방향은 왼쪽에서 오른쪽이어야 합니다.

 

// If either the WS_EX_LAYOUTRTL flag or the WS_EX_RLTREADING flag is present,
// but NOT BOTH, set the reading direction to right to left.
if ((bWSLayout && !bWSReading)
||  (!bWSLayout && bWSReading))
{
    pTextFormat_->SetReadingDirection(DWRITE_READING_DIRECTION_RIGHT_TO_LEFT);
}