Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Vissa språk, till exempel arabiska och hebreiska, kräver en läsriktning från höger till vänster. För ett DirectWrite textformatobjekt är standardläsningsriktningen från vänster till höger. DirectWrite härleder inte automatiskt läsriktningen från nationella inställningar, så du måste göra det själv.
Hämta först de utökade formatflaggorna för fönstret som texten ska renderas till med hjälp av makrot GetWindowStyleEx som definierats i windowsx.h.
// Get the window extended style flagsfor the current window.
DWORD dwStyle = GetWindowExStyle(hwnd_);
Makrot returnerar ett DWORD-värde som består av flera flaggor i kombination med bitvis OR-åtgärder. Du måste avgöra om de specifika flaggor som påverkar läsriktningen finns där.
Det finns två olika flaggor som är relaterade till läsriktningen: WS_EX_LAYOUTRTL och WS_EX_RTLREADING.
Använd operatorn BITWISE AND (&) med variabeln dwStyle och WS_EX_LAYOUTRTL makro för att lagra ett BOOL-värde som anger om layouten speglas.
// Is the WS_EX_LAYOUTRTL flag present?
BOOL bWSLayout = dwStyle & WS_EX_LAYOUTRTL;
Gör samma sak för flaggan WS_EX_RTLREADING.
// Is the WS_EX_RLTREADING flag present?
BOOL bWSReading = dwStyle & WS_EX_RTLREADING;
Ange läsriktningen med hjälp av metoden IDWriteTextFormat::SetReadingDirection. Standardvärdet är från vänster till höger, så du behöver bara ange läsriktningen om den är från höger till vänster.
Anteckning
WS_EX_LAYOUTRTL speglar hela layouten och innebär läsriktning från höger till vänster, så ange läsriktningen endast om någon av dessa flaggor finns. Om båda är närvarande avbryter de varandra och läsriktningen för textformatet ska vara från vänster till höger.
// 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);
}