Komplexe Skripts
Während die im vorherigen Abschnitt beschriebenen Funktionen für viele Sprachen gut funktionieren, können sie sich möglicherweise nicht mit den Anforderungen komplexer Skripts befassen. komplexe Skripts Sprachen sind Sprachen, deren gedruckte Formular nicht einfach gerendert wird. Ein komplexes Skript kann z. B. bidirektionales Rendering, kontextbezogene Gestaltung von Glyphen oder kombinierende Zeichen zulassen. Aufgrund dieser besonderen Anforderungen muss die Steuerung der Textausgabe sehr flexibel sein.
Funktionen, die Text TextOut-, ExtTextOut-, TabbedTextOut-, DrawText-und GetTextExtentExPoint- erweitert wurden, um komplexe Skripts zu unterstützen. Im Allgemeinen ist diese Unterstützung für die Anwendung transparent. Anwendungen sollten jedoch Zeichen in einem Puffer speichern und gleichzeitig eine ganze Textzeile anzeigen, sodass die komplexen Skriptformungsmodule den Kontext verwenden können, um Glyphen korrekt anzuordnen und zu generieren. Da die Breite einer Glyphe je nach Kontext variieren kann, sollten Anwendungen GetTextExtentExPoint- verwenden, um die Zeilenlänge zu bestimmen, anstatt zwischengespeicherte Zeichenbreiten zu verwenden.
Darüber hinaus sollten komplexe Skriptfähige Anwendungen in Erwägung ziehen, Unterstützung für die Leserichtung von rechts nach links und die rechtsbündige Ausrichtung zu ihren Anwendungen hinzuzufügen. Sie können die Leserichtung oder Ausrichtung zwischen links und rechts mit dem folgenden Code umschalten:
// 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);
Um beide Attribute gleichzeitig umzuschalten, führen Sie die folgende Anweisung aus, und rufen Sie dann SetTextAlign- und ExtTextOut-auf, wie zuvor gezeigt:
lAlign = TA_RIGHT^TA_RTLREADING; //pre-inline !
Sie können auch komplexe Skripts mit Uniscribe verarbeiten. Uniscribe ist eine Reihe von Funktionen, die ein feines Maß an Kontrolle für komplexe Skripts ermöglichen. Weitere Informationen finden Sie unter Uniscribe und Processing Complex Scripts.