Složité skripty
I když funkce probírané v předchozím příkladu dobře fungují pro mnoho jazyků, nemusí se zabývat potřebami složitých skriptů. komplexní skripty jsou jazyky, jejichž tištěný formulář není vykreslen jednoduchým způsobem. Například složitý skript může povolit obousměrné vykreslování, kontextové tvarování glyfů nebo kombinování znaků. Vzhledem k těmto speciálním požadavkům musí být ovládací prvek textového výstupu velmi flexibilní.
Funkce, které zobrazují text TextOut, ExtTextOut, TabbedTextOut, DrawTexta GetTextExtentExtentExpoint byly rozšířeny tak, aby podporovaly složité skripty. Obecně platí, že tato podpora je pro aplikaci transparentní. Aplikace by ale měly ukládat znaky do vyrovnávací paměti a současně zobrazovat celý řádek textu, aby složité moduly tvarování skriptů mohly použít kontext k správnému uspořádání a generování glyfů. Vzhledem k tomu, že šířka glyfu se může lišit podle kontextu, aplikace by měly použít GetTextExtentExpoint určit délku řádku místo použití šířky znaků v mezipaměti.
Kromě toho by složité aplikace podporující skripty měly zvážit přidání podpory pro pořadí čtení zprava doleva a zarovnání doprava do svých aplikací. Pořadí čtení nebo zarovnání mezi levým a pravým tlačítkem můžete přepínat pomocí následujícího kódu:
// 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);
Pokud chcete přepnout oba atributy najednou, spusťte následující příkaz a potom volejte SetTextAlign a ExtTextOut, jak je znázorněno výše:
lAlign = TA_RIGHT^TA_RTLREADING; //pre-inline !
Pomocí jednopisu můžete také zpracovávat složité skripty. Uniscribe je sada funkcí, které umožňují jemné řízení složitých skriptů. Další informace naleznete v tématu Uniscribe a Zpracování složitých skriptů.