Поделиться через


Сложные скрипты

Хотя функции, описанные в предыдущем примере, хорошо работают на многих языках, они могут не иметь дело с потребностями сложных скриптов. сложные скрипты являются языками, печатные формы которых не отображаются простым способом. Например, сложный скрипт может разрешить двунаправленную отрисовку, контекстное формирование глифов или объединение символов. В связи с этими особыми требованиями контроль выходных данных текста должен быть очень гибким.

Функции, отображающие текст TextOut, ExtTextOut, TabbedTextOut, DrawTextи GetTextExtentExPoint были расширены для поддержки сложных сценариев. Как правило, эта поддержка является прозрачной для приложения. Однако приложения должны сохранять символы в буфере и отображать всю строку текста в один раз, чтобы сложные модули формирования скриптов могли использовать контекст для переупорядочения и правильного создания глифов. Кроме того, поскольку ширина глифа может отличаться по контексту, приложения должны использовать GetTextExtentExtentExPoint для определения длины строки, а не использования кэшированных ширин символов.

Кроме того, сложные приложения, поддерживающие скрипты, должны рассмотреть возможность добавления поддержки порядка чтения справа налево и выравнивания по правому краю для своих приложений. Вы можете переключить порядок чтения или выравнивание между левым и правым с помощью следующего кода:

// 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 !

Вы также можете обрабатывать сложные скрипты с помощью Юниписи. Юнипись — это набор функций, которые позволяют точно контролировать сложные скрипты. Дополнительные сведения см. в Юниписи и обработке сложных скриптов.