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


Строка композиции

Строка композиции — это текущий текст в окне композиции. Это текст, который IME преобразует в конечные символы. Каждая строка композиции состоит из одного или нескольких "предложений". Предложение — это наименьшее сочетание символов, которое IME может преобразовать в конечный символ. Чтобы получить и задать строку композиции, приложение вызывает функции ImmGetCompositionString и ImmSetCompositionString соответственно.

Когда пользователь вводит текст в окне композиции, IME отслеживает состояние строки композиции. Это состояние включает сведения об атрибуте, предложение, сведения о типе и положение курсора. Приложение может получить состояние композиции с помощью функции ImmGetCompositionString .

Сведения об атрибутах отображаются в массиве 8-разрядных значений, который указывает состояние символов в строке композиции. Все символы одного предложения должны иметь один и тот же атрибут. Массив содержит по одному значению для каждого байта в строке, включая по одному байту для свинца и второго байта всех двухбайтовых символов в строке. Для каждого значения в массиве биты от 0 до 3 могут быть одним сочетанием следующих значений.

Значение Значение
ATTR_INPUT Символ, введенный пользователем. IME еще не преобразовывает этот символ.
ATTR_INPUT_ERROR Символ ошибки, который не может преобразовать IME. Например, IME не может объединить некоторые согласные.
ATTR_TARGET_CONVERTED Символ, выбранный пользователем, а затем преобразованный редактором IME.
ATTR_CONVERTED Символ, который IME уже преобразовал.
ATTR_TARGET_NOTCONVERTED Преобразуемый символ. Пользователь выбрал этот символ, но IME еще не преобразовал его.
ATTR_FIXEDCONVERTED Символы, которые IME больше не будет преобразовывать.

 

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

Сведения о предложении, включенные в состояние строки композиции, — это массив 32-разрядных значений, указывающий позиции предложений в строке композиции. Массив включает одно значение для каждого предложения и конечное значение, указывающее длину полной строки. Каждое значение в массиве указывает смещение в байтах от начала строки до предложения . Первое значение всегда равно 0, так как первое предложение всегда начинается в начале строки. Например, если строка содержит два предложения, сведения о предложении имеют три значения: первое значение равно 0, второе значение — смещение второго предложения, а третье значение — длину строки. Для Юникода позиция предложения учитывается в символах Юникода, а длина строки — это размер в символах Юникода.

Сведения о вводе, включенные в состояние строки композиции, представляют собой символьную строку, завершающуюся нулевым значением, представляющую символы, которые пользователь вводит на клавиатуре.

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

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

Наконец, элемент управления "Редактирование" поддерживает два сообщения для изменения обработки строк композиции с помощью IME. Дополнительные сведения см. в разделе EM_GETIMESTATUS и EM_SETIMESTATUS. Дополнительные сведения об элементе управления редактированием см. в разделе Изменение элемента управления.

Сведения о диспетчере методов ввода