確定文字以正確的閱讀方向顯示
某些語言,如阿拉伯文和希伯來文,需要由右至左閱讀方向。 對於 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);
}