Сложные скрипты
Хотя функции, описанные выше, хорошо работают для многих языков, они могут не соответствовать потребностям сложных скриптов. Сложные скрипты — это языки, печатная форма которых не отображается простым способом. Например, сложный скрипт может разрешить двунаправленную отрисовку, контекстное формирование глифов или объединение символов. В связи с этими особыми требованиями управление выводом текста должно быть очень гибким.
Функции, отображающие textOut, ExtTextOut, TabbedTextOut, DrawText и GetTextExtentExPoint , были расширены для поддержки сложных скриптов. Как правило, эта поддержка является прозрачной для приложения. Однако приложения должны сохранять символы в буфере и одновременно отображать целую строку текста, чтобы сложные модули формирования скриптов могли использовать контекст для изменения порядка и создания глифов. Кроме того, поскольку ширина глифа может отличаться в зависимости от контекста, приложения должны использовать GetTextExtentExpoint для определения длины строки, а не кэшированных символов.
Кроме того, сложные приложения, поддерживающие скрипты, должны рассмотреть возможность добавления поддержки порядка чтения справа налево и выравнивания по правому краю в своих приложениях. Вы можете переключить порядок чтения или выравнивание слева и справа с помощью следующего кода:
// 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);
Чтобы переключить оба атрибута одновременно, выполните следующую инструкцию, а затем вызовите Методы SetTextAlign и ExtTextOut, как показано ранее:
lAlign = TA_RIGHT^TA_RTLREADING; //pre-inline !
Вы также можете обрабатывать сложные скрипты с помощью Uniscribe. Uniscribe — это набор функций, которые обеспечивают точное управление сложными скриптами. Дополнительные сведения см. в разделе Uniscribe and Processing Complex Scripts.