Komplexe Skripts

Obwohl die im Vorherigen beschriebenen Funktionen für viele Sprachen gut funktionieren, erfüllen sie möglicherweise nicht die Anforderungen komplexer Skripts. Komplexe Skripts sind Sprachen, deren gedruckte Form nicht einfach gerendert wird. Beispielsweise kann ein komplexes Skript das bidirektionale Rendering, die kontextbezogene Gestaltung von Glyphen oder das Kombinieren von Zeichen ermöglichen. Aufgrund dieser besonderen Anforderungen muss die Steuerung der Textausgabe sehr flexibel sein.

Funktionen, die TextOut, ExtTextOut, TabbedTextOut, DrawText und 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 eine ganze Textzeile gleichzeitig anzeigen, damit die komplexen Skriptstrukturierungsmodule den Kontext verwenden können, um Glyphen ordnungsgemäß neu anzuordnen und zu generieren. Da die Breite einer Glyphe je nach Kontext variieren kann, sollten Anwendungen Außerdem GetTextExtentExPoint verwenden, um die Zeilenlänge zu bestimmen, anstatt zwischengespeicherte Zeichenbreiten zu verwenden.

Darüber hinaus sollten komplexe skriptfähige Anwendungen erwägen, ihren Anwendungen Unterstützung für die Leserichtung von rechts nach links und die Rechtsausrichtung 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 hohes Maß an Kontrolle für komplexe Skripts ermöglichen. Weitere Informationen finden Sie unter Einschreiben und Verarbeiten komplexer Skripts.