Complexe scripts
Hoewel de functies die in het voorgaande zijn besproken goed werken voor veel talen, kunnen ze mogelijk niet omgaan met de behoeften van complexe scripts. Complexe scripts talen zijn talen waarvan het afgedrukte formulier niet op een eenvoudige manier wordt weergegeven. Een complex script kan bijvoorbeeld bidirectionele rendering, contextuele vormgeving van glyphs of het combineren van tekens toestaan. Vanwege deze speciale vereisten moet het beheer van tekstuitvoer zeer flexibel zijn.
Functies waarmee tekst wordt weergegeven TextOut-, ExtTextOut, TabbedTextOut, DrawTexten GetTextExtentExPoint- zijn uitgebreid om complexe scripts te ondersteunen. Over het algemeen is deze ondersteuning transparant voor de toepassing. Toepassingen moeten echter tekens in een buffer opslaan en tegelijkertijd een hele tekstregel weergeven, zodat de complexe scriptvormende modules context kunnen gebruiken om glyphs correct te ordenen en te genereren. Omdat de breedte van een glyph per context kan variƫren, moeten toepassingen bovendien gebruikmaken van GetTextExtentExtentExPoint- om de lijnlengte te bepalen in plaats van de breedte van tekens in de cache te gebruiken.
Bovendien moeten complexe scriptbewuste toepassingen overwegen om ondersteuning toe te voegen voor de leesrichting van rechts naar links en de juiste uitlijning met hun toepassingen. U kunt de leesrichting of uitlijning tussen links en rechts in- of uitschakelen met de volgende code:
// Save lAlign (this example uses static variables)
static LONG lAlign = TA_LEFT;
// When user toggles alignment (assuming TA_CENTER is not supported).
lAlign = TA_RIGHT;
// When the user toggles reading order.
lAlign = TA_RTLREADING;
// Before calling ExtTextOut, for example, when processing WM_PAINT
SetTextAlign (hDc, lAlign);
Als u beide kenmerken tegelijk wilt in- of uitschakelen, voert u de volgende instructie uit en roept u SetTextAlign- en ExtTextOut-aan, zoals eerder wordt weergegeven:
lAlign = TA_RIGHT^TA_RTLREADING; //pre-inline !
U kunt ook complexe scripts verwerken met Uniscribe. Uniscribe is een set functies die een nauwkeurige mate van controle voor complexe scripts mogelijk maken. Zie Uniscribe en Processing Complex Scriptsvoor meer informatie.