Использование редактора методов ввода в игре
Примечание.
В этой статье описано, как работать с редактором методов ввода Windows XP (IME). Изменения были внесены в IME для Windows Vista, которые не подробно описаны в этой статье.
Редактор методов ввода (IME) — это программа, которая позволяет легко вводить текст с помощью стандартной клавиатуры для восточноазиатских языков, таких как китайский, японский, корейский и другие языки со сложными символами. Например, при использовании IMEs пользователь может вводить сложные символы в текстовом процессоре, или игрок массовой многопользовательской онлайн-игры может общаться с друзьями в сложных символах.
В этой статье объясняется, как реализовать базовый элемент управления редактированием IME в полноэкранном приложении Microsoft DirectX. Приложения, которые используют преимущества DXUT, автоматически получают функции IME. Для приложений, которые не используют платформу, в этой статье описывается добавление поддержки IME в элемент управления редактированием.
Содержимое.
- Поведение IME по умолчанию
- Использование imEs с DXUT
- Переопределение поведения IME по умолчанию
- Функции
- Сообщения
- Примеры
- Сообщения IME
- Отрисовка
- Ограничения
- Сведения о реестре
- Приложение A. Версии CHT для каждой операционной системы
- Дополнительные сведения
- GetReadingStringString
- ShowReadingWindow
Поведение IME по умолчанию
ImEs сопоставляют ввод клавиатуры с фонетических компонентов или других языковых элементов, относящихся к выбранному языку. В типичном сценарии ключи пользовательского типа, представляющие произношение сложного символа. Если IME распознает произношение как допустимое, он представляет пользователю список слов или кандидатов фраз, из которых пользователь может выбрать окончательный выбор. Затем выбранное слово отправляется приложению через ряд сообщений Microsoft Windows WM_CHAR . Так как IME работает на уровне ниже приложения путем перехвата ввода клавиатуры, присутствие IME прозрачно для приложения. Почти все приложения Windows могут легко воспользоваться преимуществами IMEs, не зная о их существовании и не требуя специального написания кода.
Типичный IME отображает несколько окон для руководства пользователя по вводу символов, как показано в следующих примерах.
Тип окна | Description | Выходные данные IME |
---|---|---|
А. Окно чтения | Содержит нажатия клавиш на клавиатуре; обычно изменяется после каждого нажатия клавиш. | чтение строки |
B. Окно композиции | Содержит коллекцию символов, которые пользователь создал с помощью IME. Эти символы рисуются IME поверх приложения. Когда пользователь уведомляет IME о том, что строка композиции удовлетворительна, IME отправляет строку композиции приложению через ряд сообщений WM_CHAR. | строка композиции |
C. Окно кандидата | Когда пользователь ввел допустимое произношение, IME отображает список кандидатов символов, которые соответствуют заданному произношению. Затем пользователь выбирает нужный символ из этого списка, а IME добавляет этот символ в окно композиции. | следующий символ в строке композиции |
D. Индикатор языкового стандарта ввода | Показывает язык, выбранный пользователем для ввода клавиатуры. Этот индикатор внедрен в панель задач Windows. Язык ввода можно выбрать, открыв панель управления региональных и языковых параметров, а затем щелкнув "Сведения" на вкладке "Языки". | - |
Использование imEs с DXUT
В DXUT класс CDXUTIMEEditBox реализует функции IME. Этот класс является производным от класса CDXUTEditBox, базового элемента управления редактирования, предоставленного платформой. CDXUTIMEEditBox расширяет элемент управления редактированием для поддержки imEs, переопределяя методы CDXUTIMEEditBox. Классы предназначены таким образом, чтобы помочь разработчикам узнать, что им нужно принять из платформы для реализации поддержки IME в собственных элементах управления редактированием. В остальной части этого раздела объясняется, как платформа и CDXUTIMEEditBox, в частности, переопределяет базовый элемент управления редактирования для реализации функциональных возможностей IME.
Большинство переменных IME в CDXUTIMEEditBox объявлены как статические, так как многие буферы и состояния IME относятся к процессу. Например, процесс имеет только один буфер для строки композиции. Даже если процесс содержит десять элементов управления редактированием, все они будут совместно использовать один и тот же буфер строки композиции. Таким образом, буфер строки композиции для CDXUTIMEEditBox является статическим, что не позволяет приложению занимать ненужное пространство памяти.
CDXUTIMEEditBox реализован в следующем коде DXUT:
(корневой каталог SDK)\Samples\C++\Common\DXUTgui.cpp
Переопределение поведения IME по умолчанию
Обычно IME использует стандартные процедуры Windows для создания окна (см. раздел "Использование Windows"). В обычных условиях это дает удовлетворительные результаты. Однако если приложение отображается в полноэкранном режиме, как и обычно для игр, стандартные окна больше не работают и могут не отображаться в верхней части приложения. Чтобы устранить эту проблему, приложение должно рисовать сами окна IME, а не полагаться на Windows для выполнения этой задачи.
Если поведение создания окна IME по умолчанию не предоставляет необходимых приложений, приложение может переопределить обработку окна IME. Приложение может достичь этого, обрабатывая сообщения, связанные с IME, и вызывая API input Method Manager (IMM).
Когда пользователь взаимодействует с IME для ввода сложных символов, IMM отправляет сообщения приложению, чтобы уведомить его о важных событиях, таких как запуск композиции или отображение окна кандидата. Приложение обычно игнорирует эти сообщения и передает их обработчику сообщений по умолчанию, что приводит к их обработке IME. Когда приложение вместо обработчика по умолчанию обрабатывает сообщения, он управляет именно тем, что происходит при каждом из событий IME. Часто обработчик сообщений извлекает содержимое различных окон IME путем вызова API IMM. После получения этой информации приложение может правильно рисовать окна IME, когда оно должно отображаться на экране.
Функции
IME должен получить строку чтения, скрыть окно чтения и получить ориентацию окна чтения. В этой таблице показаны функциональные возможности для каждой версии IME:
Получение строки чтения | Скрытие окна чтения | Ориентация окна чтения | |
---|---|---|---|
До версии 6.0 | А. Чтение частных данных IME окна доступа к IME напрямую. См. раздел "Структура 4" | Ловушка частных сообщений IME. См. раздел "3 сообщения" | Изучите сведения о реестре. См. раздел "Сведения о реестре 5" |
После версии 6.0 | GetReadingStringString | ShowReadingWindow | GetReadingStringString |
Сообщения
Для более новой версии IME, реализующей ShowReadingWindow(), не нужно обрабатывать следующие сообщения.
Следующие сообщения находятся в ловушке обработчиком сообщений приложения (т. е. они не передаются в DefWindowProc), чтобы предотвратить отображение окна чтения.
Msg == WM_IME_NOTIFY
wParam == IMN_PRIVATE
lParam == 1, 2 (CHT IME version 4.2, 4.3 and 4.4 / CHS IME 4.1 and 4.2)
lParam == 16, 17, 26, 27, 28 (CHT IME version 5.0, 5.1, 5.2 / CHS IME 5.3)
Примеры
В следующих примерах показано, как получить сведения о строке чтения из более старых IME, у которых нет GetReadingString(). Код создает следующие выходные данные:
Выходные данные | Description |
---|---|
Dwlen DWORD | Длина строки чтения. |
DWORD dwerr | Индекс символа ошибки. |
WSTR LPWSTR | Указатель на строку чтения. |
Юникод BOOL | Если значение true, строка чтения находится в формате Юникода. В противном случае он находится в многобайтовом формате. |
CHT IME версии 4.2, 4.3 и 4.4
LPINPUTCONTEXT lpIMC = _ImmLockIMC(himc);
LPBYTE p = *(LPBYTE *)((LPBYTE)_ImmLockIMCC(lpIMC->hPrivate) + 24);
if (!p) break;
dwlen = *(DWORD *)(p + 7*4 + 32*4);
dwerr = *(DWORD *)(p + 8*4 + 32*4);
wstr = (WCHAR *)(p + 56);
unicode = TRUE;
CHT IME версии 5.0
LPINPUTCONTEXT lpIMC = _ImmLockIMC(himc);
LPBYTE p = *(LPBYTE *)((LPBYTE)_ImmLockIMCC(lpIMC->hPrivate) + 3*4);
if (!p) break;
p = *(LPBYTE *)((LPBYTE)p + 1*4 + 5*4 + 4*2 );
if (!p) break;
dwlen = *(DWORD *)(p + 1*4 + (16*2+2*4) + 5*4 + 16);
dwerr = *(DWORD *)(p + 1*4 + (16*2+2*4) + 5*4 + 16 + 1*4);
wstr = (WCHAR *)(p + 1*4 + (16*2+2*4) + 5*4);
unicode = FALSE;
CHT IME версии 5.1, 5.2 и CHS IME версии 5.3
LPINPUTCONTEXT lpIMC = _ImmLockIMC(himc);
LPBYTE p = *(LPBYTE *)((LPBYTE)_ImmLockIMCC(lpIMC->hPrivate) + 4);
if (!p) break;
p = *(LPBYTE *)((LPBYTE)p + 1*4 + 5*4);
if (!p) break;
dwlen = *(DWORD *)(p + 1*4 + (16*2+2*4) + 5*4 + 16 * 2);
dwerr = *(DWORD *)(p + 1*4 + (16*2+2*4) + 5*4 + 16 * 2 + 1*4);
wstr = (WCHAR *) (p + 1*4 + (16*2+2*4) + 5*4);
unicode = TRUE;
CHS IME версии 4.1
// GetImeId(1) returns VS_FIXEDFILEINFO:: dwProductVersionLS of IME file
int offset = ( GetImeId( 1 ) >= 0x00000002 ) ? 8 : 7;
LPINPUTCONTEXT lpIMC = _ImmLockIMC(himc);
BYTE p = *(LPBYTE *)((LPBYTE)_ImmLockIMCC(lpIMC->hPrivate) + offset * 4);
if (!p) break;
dwlen = *(DWORD *)(p + 7*4 + 16*2*4);
dwerr = *(DWORD *)(p + 8*4 + 16*2*4);
dwerr = min(dwerr, dwlen);
wstr = (WCHAR *)(p + 6*4 + 16*2*1);
unicode = TRUE;
CHS IME версии 4.2
int nTcharSize = IsNT() ? sizeof(WCHAR) : sizeof(char);
LPINPUTCONTEXT lpIMC = _ImmLockIMC(himc);
BYTE p = *(LPBYTE *)((LPBYTE)_ImmLockIMCC(lpIMC->hPrivate) + 1*4 + 1*4 + 6*4);
if (!p) break;
dwlen = *(DWORD *)(p + 1*4 + (16*2+2*4) + 5*4 + 16 * nTcharSize);
dwerr = *(DWORD *)(p + 1*4 + (16*2+2*4) + 5*4 + 16 * nTcharSize + 1*4);
wstr = (WCHAR *) (p + 1*4 + (16*2+2*4) + 5*4);
unicode = IsNT() ? TRUE : FALSE;
Сообщения IME
Полноэкранное приложение должно правильно обрабатывать следующие сообщения, связанные с IME:
WM_INPUTLANGCHANGE
IMM отправляет WM_INPUTLANGCHANGE сообщение в активное окно приложения после изменения входного языкового стандарта пользователем с сочетанием клавиш (обычно ALT+SHIFT) или с индикатором входного языкового стандарта на панели задач или языковой панели. Строка языка — это элемент управления на экране, с помощью которого пользователь может настроить текстовую службу. (См. раздел Как отобразить языковую панель.) На следующем снимке экрана показан список выбора языка, отображаемый при нажатии пользователем индикатора языкового стандарта.
Когда IMM отправляет сообщение WM_INPUTLANGCHANGE, CDXUTIMEEditBox должен выполнять несколько важных задач:
- Метод GetKeyboardLayout вызывается для возврата входного идентификатора языкового стандарта (ID) для потока приложения. Класс CDXUTIMEEditBox сохраняет этот идентификатор в своей переменной статических элементов s_hklCurrent для последующего использования. Важно знать текущий языковой стандарт ввода, так как IME для каждого языка имеет свое собственное поведение. Разработчику может потребоваться предоставить другой код для разных языковых стандартов ввода.
- CDXUTIMEEditBox инициализирует строку для отображения в индикаторе языка поля редактирования. Этот индикатор может отображать активный язык ввода, если приложение работает в полноэкранном режиме, и ни панель задач, ни языковая панель не отображаются.
- Метод ImmGetConversionStatus вызывается, чтобы указать, находится ли входной языковой стандарт в собственном или не собственном режиме преобразования. Собственный режим преобразования позволяет пользователю вводить текст на выбранном языке. Неродной режим преобразования делает клавиатуру стандартной английской клавиатурой. Важно предоставить пользователю визуальный сигнал о том, в каком режиме преобразования находится IME, чтобы пользователь легко знал, какие символы следует ожидать при нажатии клавиши. CDXUTIMEEditBox предоставляет этот визуальный сигнал с цветом индикатора языка. Если входной языковой стандарт использует IME с собственным режимом преобразования, класс CDXUTIMEEditBox рисует текст индикатора с цветом, определенным параметром m_IndicatorImeColor. Если IME находится в режиме преобразования, отличном от собственного кода, или IME вообще не используется, класс рисует текст индикатора с цветом, определенным параметром m_IndicatorEngColor.
- CDXUTIMEEditBox проверка входной языковой стандарт и задает статическую переменную-член s_bInsertOnType значение TRUE для корейского и FALSE для всех других языков. Этот флаг необходим из-за различных действий корейских IMEs и всех других IMEs. При вводе символов на языках, отличных от корейского, введенный пользователем текст отображается в окне композиции, а пользователь может свободно изменять содержимое строки композиции. Пользователь нажимает клавишу ВВОД при удовлетворении строки композиции, а строка композиции отправляется приложению в виде ряда сообщений WM_CHAR. Однако в корейских мгновенных сообщениях, когда пользователь нажимает клавишу для ввода текста, символ немедленно отправляется приложению. Когда пользователь впоследствии нажимает дополнительные клавиши, чтобы изменить этот начальный символ, символ в поле редактирования изменяется, чтобы отразить дополнительные входные данные от пользователя. По сути, пользователь создает символы в поле редактирования. Эти два поведения отличаются достаточно, чтобы CDXUTIMEEditBox должен код для каждого из них в частности.
- Метод static member SetupImeApi вызывается для получения адресов двух функций из модуля IME: GetReadingString и ShowReadingWindow. Если эти функции существуют, вызывается ShowReadingWindow, чтобы скрыть окно чтения по умолчанию для этого IME. Так как приложение отрисовывает само окно чтения, оно уведомляет IME отключать окно чтения по умолчанию, чтобы не препятствовать отрисовке полноэкранной отрисовки.
IMM отправляет сообщение WM_IME_SETCONTEXT при активации окна приложения. Параметр lParam этого сообщения содержит флаг, указывающий на IME, какие окна должны быть нарисованы и которые не должны быть. Так как приложение обрабатывает весь документ, IME не требуется для рисования любого из окон IME. Поэтому обработчик сообщений приложения просто задает lParam значение 0 и возвращает.
Чтобы приложения поддерживали IME, для WM_IME_SETCONTEXT сообщения, связанного с IME, требуется специальная обработка. Так как Windows обычно отправляет это сообщение приложению до вызова метода PanoramaInitialize(), Panorama не может обработать пользовательский интерфейс для отображения окон списка кандидатов.
Следующий фрагмент кода указывает приложениям Windows не отображать пользовательский интерфейс, связанный с окном списка кандидатов, что позволяет Panorama специально обрабатывать этот пользовательский интерфейс.
case WM_IME_SETCONTEXT:
lParam = 0;
lRet = DefWindowProc(hWnd, msg, wParam, lParam);
break;
//... more message processing
return lRet;
WM_IME_STARTCOMPOSITION
IMM отправляет WM_IME_STARTCOMPOSITION сообщение приложению, когда композиция IME начинается в результате нажатия клавиш пользователем. Если IME использует окно композиции, он отображает текущую строку композиции в окне композиции. CDXUTIMEEditBox обрабатывает это сообщение, выполняя две задачи:
- CDXUTIMEEditBox очищает буфер строки композиции и буфер атрибутов. Эти буферы являются статическими элементами CDXUTIMEEditBox.
- CDXUTIMEEditBox задает значение TRUE для переменной статических элементов s_bHideCaret. Этот элемент, определенный в базовом классе CDXUTEditBox, определяет, должен ли курсор в поле редактирования быть нарисован при отрисовке поля редактирования. Окно композиции работает аналогично полям редактирования с текстом и курсором. Чтобы избежать путаницы при отображении окна композиции, поле редактирования скрывает курсор таким образом, чтобы одновременно отображалось только один курсор.
WM_IME_COMPOSITION
IMM отправляет WM_IME_COMPOSITION сообщение приложению, когда пользователь вводит нажатие клавиш, чтобы изменить строку композиции. Значение lParam указывает, какой тип информации приложение может получить из диспетчера методов ввода (IMM). Приложение должно получить доступную информацию путем вызова ImmGetCompositionString , а затем сохранить сведения в закрытом буфере, чтобы он смог отрисовки элементов IME позже.
Проверка CDXUTIMEEditBox для и извлекает следующие данные строки композиции:
WM_IME_ENDCOMPOSITION
IMM отправляет WM_IME_ENDCOMPOSITION сообщение приложению при завершении операции композиции IME. Это может произойти, когда пользователь нажимает клавишу ВВОД для утверждения строки композиции или клавиши ESC для отмены композиции. CDXUTIMEEditBox обрабатывает это сообщение, задав буфер строки композиции пустым. Затем он задает s_bHideCaret значение FALSE, так как окно композиции закрыто, а курсор в поле редактирования снова должен быть видимым.
Обработчик сообщений CDXUTIMEEditBox также задает значение FALSE s_bShowReadingWindow. Этот флаг определяет, рисует ли класс окно чтения при отрисовке самого поля редактирования, поэтому оно должно иметь значение FALSE, когда композиция заканчивается.
WM_IME_NOTIFY
IMM отправляет WM_IME_NOTIFY сообщение приложению при каждом изменении окна IME. Приложение, обрабатывающее рисунок окон IME, должно обработать это сообщение, чтобы оно знали о любом обновлении содержимого окна. WParam указывает команду или изменение, которое происходит. CDXUTIMEEditBox обрабатывает следующие команды:
Команда IME | Description |
---|---|
IMN_SETOPENSTATUS | Этот атрибут содержит такие сведения, как состояние каждого символа в строке композиции (например, преобразованное или не преобразованное). Эта информация необходима, так как CDXUTIMEEditBox цветирует символы строки композиции по-разному на основе их атрибутов. |
/ IMN_OPENCANDIDATE IMN_CHANGECANDIDATE | Отправляется в приложение при открытии или обновлении окна кандидата соответственно. Окно кандидата открывается, когда пользователь хочет изменить преобразованный выбор текста. Окно обновляется при перемещении индикатора выбора или изменении страницы. CDXUTIMEEditBox использует один обработчик сообщений для обеих этих команд, так как необходимые задачи совпадают:
|
IMN_CLOSECANDIDATE | Отправляется в приложение при закрытии окна кандидата. Это происходит, когда пользователь сделал выбор из списка кандидатов. CDXUTIMEEditBox обрабатывает эту команду, задав видимый флаг окна кандидата значение FALSE, а затем очищая буфер строки кандидата. |
IMN_PRIVATE | Отправлено приложению, когда IME обновил свою строку чтения в результате ввода или удаления символов пользователем. Приложение должно получить строку чтения и сохранить ее для отрисовки. CDXUTIMEEditBox имеет два метода для получения строки чтения на основе того, как строки чтения поддерживаются в IME:
|
Отрисовка
Отрисовка элементов и окон IME проста. CDXUTIMEEditBox позволяет базовому классу сначала отображаться, так как окна IME должны отображаться в верхней части элемента управления редактирования. После отрисовки базового поля редактирования CDXUTIMEEditBox проверка флаг видимости каждого окна IME (индикатор, композиция, кандидат и окно чтения) и рисует окно, если оно должно быть видимым. Описание различных типов окон IME по умолчанию см. в разделе "Поведение IME по умолчанию".
Индикатор языкового стандарта ввода
Индикатор входного языкового стандарта отображается перед любыми другими окнами IME, так как это элемент, который всегда отображается. Поэтому он должен отображаться под другими окнами IME. CDXUTIMEEditBox отрисовывает индикатор путем вызова метода RenderIndicator, в котором цвет шрифта индикатора определяется путем изучения статической переменной s_ImeState, которая отражает текущий режим преобразования IME. Если включена функция IME и активное преобразование в машинном коде, метод использует m_IndicatorImeColor в качестве цвета индикатора. Если IME отключен или находится в режиме преобразования, отличном от машинного кода, m_IndicatorImeColor используется для рисования текста индикатора. По умолчанию окно индикатора рисуется справа от поля редактирования. Приложения могут изменить это поведение, переопределив метод RenderIndicator.
На следующем рисунке показаны различные внешние виды индикатора языкового стандарта ввода для английского, японского языка в алфавитно-цифровом режиме преобразования и японском в собственном режиме преобразования:
Окно композиции
Рисунок окна композиции обрабатывается в методе RenderComposition CDXUTIMEEditBox. Окно композиции плавает над полем редактирования. Он должен быть нарисован в позиции курсора базового элемента управления редактирования. CDXUTIMEEditBox обрабатывает отрисовку следующим образом:
- Вся строка композиции рисуется с помощью цветов строки композиции по умолчанию.
- Символы с определенными специальными атрибутами должны быть нарисованы различными цветами, поэтому CDXUTIMEEditBox проверяет символы строки композиции и проверяет атрибут строки. Если атрибут вызывает разные цвета, символ снова рисуется с соответствующими цветами.
- Курсор окна композиции рисуется для завершения отрисовки.
Курсор должен мигать для корейских IMEs, но он не должен быть для других imEs. RenderComposition определяет, должен ли курсор отображаться на основе значений таймера при использовании корейского IME.
Чтение и кандидат windows
Окна чтения и кандидатов отображаются тем же методом CDXUTIMEEditBox, RenderCandidateReadingWindow. Оба окна содержат массив строк для вертикального макета или одну строку в случае горизонтального макета. Основная часть кода в RenderCandidateReadingWindow используется для размещения окна, чтобы часть окна не падала за пределы окна приложения и не обрезалась.
Ограничения
В мгновенных сообщениях иногда содержатся расширенные функции для повышения удобства ввода текста. Некоторые функции, найденные в новых мгновенных сообщениях, показаны на следующих рисунках. Эти расширенные функции отсутствуют в DXUT. Реализация поддержки этих расширенных функций может быть сложной, так как интерфейс не определен для получения необходимых сведений из IMEs.
Расширенный китайский IME с расширенным списком кандидатов:
Расширенный японский IME с некоторыми записями кандидата, которые содержат дополнительный текст для описания их значений:
Расширенный корейский IME, включающий систему распознавания рукописного ввода:
Сведения о реестре
Следующие сведения о реестре проверка для определения ориентации окна чтения, если текущий IME старше CHT New Телефон tic, который не реализует GetReadingStringString().
Ключ | Значение |
---|---|
HKCU\software\microsoft\windows\currentversion\IME_Name | Сопоставление клавиатуры |
Где: IME_Name — MSTCIPH, если версия файла IME — 5.1 или более поздняя; в противном случае IME_Name — TINTLGNT.
Ориентация окна чтения по горизонтали, если одно из следующих значений:
- IME версии 5.0, а значение сопоставления клавиатуры — 0x22 или 0x23
- IME — это версия 5.1 или версия 5.2, а значение сопоставления клавиатуры — 0x22, 0x23 или 0x24.
Если условие не выполняется, окно чтения вертикали.
Приложение A. Версии CHT для каждой операционной системы
Операционная система | Версия IME CHT |
---|---|
Windows 98 | 4.2 |
Windows 2000 | 4.3 |
неизвестно | 4.4. |
Windows ME | 5,0 |
Office XP | 5.1 |
Windows XP | 5,2 |
Автономный веб-скачивание | 6,0 |
Дополнительные сведения
Дополнительные сведения см. в следующих разделах:
- Установка и использование редакторов метода ввода
- Международное текстовое отображение
- Консорциум Юникода
- Разработка международного программного обеспечения. Доктор Международный. 2-й эд. Редмонд, WA: Microsoft Press, 2003.
GetReadingStringString
Получает чтение строковых сведений.
Параметры
-
ему
-
[in] Контекст ввода.
-
uReadingBufLen
-
[in] Длина lpwReadingBuf в WCHAR. Если значение равно нулю, это означает длину буфера чтения запросов.
-
lpwReadingBuf
-
[out] Возвращает строку чтения (не нулевой конец).
-
pnErrorIndex
-
[out] Возвращает индекс символа ошибки в строке чтения, если есть.
-
pfIsVertical
-
[out] Если это значение TRUE, пользовательский интерфейс чтения вертикали. В противном случае — горизонтальный puMaxReadingLen.
-
puMaxReadingLen
-
[out] Длина пользовательского интерфейса чтения. Максимальная длина чтения не фиксирована; он зависит не только от раскладки клавиатуры, но и от режима ввода (например, внутреннего кода, суррогатного ввода).
Возвращаемые значения
Длина строки чтения.
Замечания
Если возвращаемое значение больше значения uReadingBufLen, все выходные параметры не определены.
Эта функция реализована в IME 6.0 или более поздней версии CHT и может быть приобретена GetProcAddress в дескрипторе модуля IME; Дескриптор модуля IME можно получить с помощью ImmGetIMEFileName и LoadLibrary.
Requirements
-
Верхний колонтитул
-
Объявлен в Imm.h.
-
Импорт библиотеки
-
Используйте Imm.lib.
ShowReadingWindow
Отображение (или скрытие) окна чтения.
Параметры
-
ему
-
[in] Контекст ввода.
-
bShow
-
[in] Установите значение TRUE, чтобы отобразить окно чтения (или FALSE, чтобы скрыть его).
Возвращаемые значения
Замечания
Возвращает значение TRUE, если выполнено успешно или FALSE, если в противном случае.
Requirements
-
Верхний колонтитул
-
Объявлен в Imm.h.
-
Импорт библиотеки
-
Используйте Imm.lib.