Verifique se o texto é exibido com a direção de leitura correta
Algumas línguas, como árabe e hebraico, exigem uma direção de leitura da direita para a esquerda. Para um DirectWrite objeto de formato de texto, a direção de leitura padrão é da esquerda para a direita. DirectWrite não infere automaticamente a direção de leitura da localidade, portanto, você deve fazer isso por conta própria.
Primeiro, obtenha os sinalizadores de estilo estendidos para a janela para a qual o texto será renderizado usando a macro GetWindowStyleEx definida em windowsx.h.
// Get the window extended style flagsfor the current window.
DWORD dwStyle = GetWindowExStyle(hwnd_);
A macro retorna um valor DWORD composto por vários sinalizadores combinados com operações OR bit a bit. Você deve determinar se os sinalizadores específicos que afetam a direção da leitura estão lá.
Há dois sinalizadores diferentes relacionados à direção de leitura: WS_EX_LAYOUTRTL e WS_EX_RTLREADING.
Use o operador AND bit a bit (&) com a variável dwStyle e a macro WS_EX_LAYOUTRTL para armazenar um valor BOOL que indica se o layout é espelhado.
// Is the WS_EX_LAYOUTRTL flag present?
BOOL bWSLayout = dwStyle & WS_EX_LAYOUTRTL;
Faça a mesma coisa para o sinalizador WS_EX_RTLREADING.
// Is the WS_EX_RLTREADING flag present?
BOOL bWSReading = dwStyle & WS_EX_RTLREADING;
Defina a direção de leitura usando o método IDWriteTextFormat::SetReadingDirection . O padrão é da esquerda para a direita, portanto, você só precisará definir a direção de leitura se ela for da direita para a esquerda.
Observação
WS_EX_LAYOUTRTL espelha todo o layout e implica a direção de leitura da direita para a esquerda, portanto, defina a direção de leitura somente se um desses sinalizadores estiver presente. Se ambos estiverem presentes, eles cancelarão um ao outro e a direção de leitura para o formato de texto deverá ser da esquerda para a direita.
// 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);
}