if (!hWnd) return 2;
return 0;
}

Без указания в строке названия окна буквы L компилятор не выдаст сообщения об ошибке, но пары рядом стоящих букв будут восприниматься как один символ UNICODE и в заголовке окна будут отображаться странные значки. То же самое относится и к названию оконного класса, но он на экране не отображается.

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

Предположим, что необходимо вводить китайский текст в управляющий элемент класса edit, размещенный в диалоговом окне (рис. 9.1).

Иероглиф нельзя ввести при помощи стандартной клавиатуры, на ней недостаточно клавиш. Задача решается вызовом показанного на рис. 9.2 окна специального редактора строки - IME Input Metod Editor.

В этом окне строка UNICODE компонуется из знаков, получаемых при вводе текстовых названий иероглифов. Взаимодействие с приложением производится на основе обработки сообщений от редактора IME (WM_IME_SETCONTEXT, WM_IME_C0NTR0L, WM_IME_C0MP0SITI0N, WM_IME_NOTIFY) и вызова специальных функций API.

Ввод иероглифов

от Ш гкАГ; Перелать|

В ы х о л Рис. 9.1. Ввод иероглифов Для решения поставленной задачи удобно использовать сообщение WM_IME_C0MP0-SITI0N, которое при завершении набора строки передает в поле LPARAM константу GCS_RESULTSTR.

После того как ввод будет завершен, можно скопировать строку из редактора ШЕ в приложение при помощи функции ImmGetCompositionStri ngW().

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


⇐ Предыдущая| |Следующая ⇒