Scripts complejos
Aunque las funciones descritas en el anterior funcionan bien para muchos lenguajes, es posible que no se ocupen de las necesidades de scripts complejos. Los scripts complejos son lenguajes cuyo formulario impreso no se representa de una manera sencilla. Por ejemplo, un script complejo puede permitir la representación bidireccional, la forma contextual de glifos o la combinación de caracteres. Debido a estos requisitos especiales, el control de la salida de texto debe ser muy flexible.
Las funciones que muestran texto TextOut, ExtTextOut, TabbedTextOut, DrawText y GetTextExtentExPoint se han ampliado para admitir scripts complejos. En general, esta compatibilidad es transparente para la aplicación. Sin embargo, las aplicaciones deben guardar caracteres en un búfer y mostrar una línea completa de texto a la vez, de modo que los módulos complejos de modelado de scripts puedan usar el contexto para reordenar y generar glifos correctamente. Además, dado que el ancho de un glifo puede variar según el contexto, las aplicaciones deben usar GetTextExtentExPoint para determinar la longitud de línea en lugar de usar anchos de caracteres almacenados en caché.
Además, las aplicaciones complejas con reconocimiento de scripts deben considerar la posibilidad de agregar compatibilidad con el orden de lectura de derecha a izquierda y la alineación derecha con sus aplicaciones. Puede alternar el orden de lectura o la alineación entre izquierda y derecha con el código siguiente:
// 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);
Para alternar ambos atributos a la vez, ejecute la siguiente instrucción y, a continuación, llame a SetTextAlign y ExtTextOut, como se mostró anteriormente:
lAlign = TA_RIGHT^TA_RTLREADING; //pre-inline !
También puede procesar scripts complejos con Uniscribe. Uniscribe es un conjunto de funciones que permiten un cierto grado de control para scripts complejos. Para obtener más información, consulte Scripts complejos de uniscribe y procesamiento.