Komplexe Skripts

Obwohl die in der vorherigen Erläuterten Funktionen für viele Sprachen gut funktionieren, können sie die Anforderungen komplexer Skripts nicht erfüllen. Komplexe Skripts sind Sprachen, deren gedruckte Form nicht auf einfache Weise gerendert wird. Beispielsweise kann ein komplexes Skript bidirektionales Rendering, die kontextbezogene Gestaltung von Glyphen oder das Kombinieren von Zeichen ermöglichen. Aufgrund dieser speziellen Anforderungen muss die Steuerung der Textausgabe sehr flexibel sein.

Funktionen, die Text TextOut, ExtTextOut, TabbedTextOut, DrawTextund GetTextExtentExPoint anzeigen, wurden erweitert, 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, damit die Komplexen Skript-Shaping-Module Kontext verwenden können, um Glyphen ordnungsgemäß neu zu anordnen und zu generieren. Da die Breite eines Glyphen 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 skriptbasierte Anwendungen erwägen, unterstützung für die Leserichtung von rechts nach links und die rechte Ausrichtung ihrer Anwendungen zu bieten. 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 umschalten zu können, führen Sie die folgende Anweisung aus, und rufen Sie dann SetTextAlign und ExtTextOutauf, wie zuvor gezeigt:

lAlign = TA_RIGHT^TA_RTLREADING;  //pre-inline !

Sie können auch komplexe Skripts mit Uniscribe verarbeiten. Uniscribe ist ein Satz von Funktionen, die ein hohes Maß an Kontrolle für komplexe Skripts ermöglichen. Weitere Informationen finden Sie unter Uniscribe and Processing Complex Scripts.