某些語言,如阿拉伯文和希伯來文,需要由右至左閱讀方向。 若為 DirectWrite 文字格式對象,預設閱讀方向為由左至右。 DirectWrite 不會從地區設定自動推斷閱讀方向,因此您必須自行執行此動作。
首先,使用 windowsx.h 中定義的 GetWindowStyleEx 巨集,取得用於呈現文字的視窗延伸樣式旗標。
// Get the window extended style flagsfor the current window.
DWORD dwStyle = GetWindowExStyle(hwnd_);
該巨集會返回由多個旗標透過位元 OR 運算結合而成的 DWORD 值。 您必須判斷影響閱讀方向的特定旗標是否存在。
牽涉到閱讀方向有 2 個不同的標誌:WS_EX_LAYOUTRTL 和 WS_EX_RTLREADING。
使用位元 AND 運算子(&)搭配 dwStyle 變數和 WS_EX_LAYOUTRTL 巨集來儲存 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);
}