Script complessi
Anche se le funzioni descritte nel precedente funzionano bene per molti linguaggi, potrebbero non gestire le esigenze di script complessi. gli script complessi sono lingue il cui rendering del modulo stampato non viene eseguito in modo semplice. Ad esempio, uno script complesso può consentire il rendering bidirezionale, la forma contestuale dei glifi o la combinazione di caratteri. A causa di questi requisiti speciali, il controllo dell'output di testo deve essere molto flessibile.
Le funzioni che visualizzano testo TextOut, ExtTextOut, TabbedTextOut, DrawTexte GetTextExtentExPoint sono state estese per supportare script complessi. In generale, questo supporto è trasparente per l'applicazione. Tuttavia, le applicazioni devono salvare i caratteri in un buffer e visualizzare un'intera riga di testo contemporaneamente, in modo che i moduli di data shaping di script complessi possano usare il contesto per riordinare e generare correttamente glifi. Inoltre, poiché la larghezza di un glifo può variare in base al contesto, le applicazioni devono usare GetTextExtentExPoint per determinare la lunghezza della riga anziché usare le larghezze dei caratteri memorizzate nella cache.
Inoltre, le applicazioni complesse che supportano script devono prendere in considerazione l'aggiunta del supporto per l'ordine di lettura da destra a sinistra e l'allineamento destro alle applicazioni. È possibile attivare o disattivare l'ordine di lettura o l'allineamento tra sinistra e destra con il codice seguente:
// 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);
Per attivare o disattivare entrambi gli attributi contemporaneamente, eseguire l'istruzione seguente e quindi chiamare SetTextAlign e ExtTextOut, come illustrato in precedenza:
lAlign = TA_RIGHT^TA_RTLREADING; //pre-inline !
È anche possibile elaborare script complessi con Uniscribe. Uniscribe è un set di funzioni che consentono un grado di controllo fine per script complessi. Per altre informazioni, vedere Uniscribe e Processing Complex Scripts.