[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Программирование: Разработка и отладка программ


Программирование методов ввода

Метод ввода - это программный интерфейс, позволяющий приложениям работать в международной среде, основанной Поддержке национальных языков (NLS). Ниже перечислены свойства метода ввода:

Инициализация

Для того чтобы узнать, нужно ли инициализировать метод ввода перед его вызовом, воспользуйтесь функцией IMQueryLanguage. Приложение инициализирует метод ввода для определенной локали путем вызова функции IMInitialize, которая инициализирует редактор для этого метода ввода (IMED). Эта функция определяет метод ввода, имя которого указано в переменной среды LANG, с помощью переменной среды LOCPATH. В переменной среды LOCPATH указаны имена каталогов, применяемых для поиска методов ввода.

Если нужный метод ввода найден, функция IMInitialize вызывает функцию load для загрузки метода ввода и подключения файла imkeymap. После получения доступа к методу ввода эта функция возвращает объект типа IMFep. Структура объектов типа IMFep недоступна пользователям.

Функция IMInitialize подключает функцию перекодировщика с помощью функции load. Функция load аналогична функции exec. Она подключает перекодировщик во время выполнения. Так как функция IMInitialize является библиотечной, в ней предусмотрены некоторые средства защиты. Если функция IMInitialize вызывается из программы, запущенной от имени пользователя root, значение переменной LOCPATH будет проигнорировано, и поиск перекодировщиков будет выполняться только в каталогах /usr/lib/nls/loc/iconv и /etc/nls/loc/iconv.

Объект IMFep наследует кодовый набор локали, которая является текущей в момент вызова функции IMInitialize. Следовательно, функции IMFilter и IMLookupString возвращают строки в кодовом наборе этой локали. Изменение локали после вызова функции IMInitialize не влияет на кодовый набор IMFep.

Для каждого объекта IMFep приложение может вызвать функцию IMCreate, позволяющую создать один или несколько экземпляров IMObject. Объект IMObject автоматически изменяет состояние и может управлять несколькими областями метода ввода (см. Области методов ввода). Способ обработки ввода, определяемый IMObject, зависит от кодового набора и раскладки клавиатуры, связанной с локалью. В простейшем случае, если приложение управляет одним диалогом с пользователем, необходим один объект IMObject. Метод ввода поддерживает и новые пользовательские интерфейсы, позволяющие поддерживать несколько диалогов с пользователем в рамках одного приложения, при этом для каждого диалога необходим отдельный объект IMObject.

Различие между IMFep и IMObject состоит в том, что IMFep - это указатель, ссылающийся в приложении на метод ввода, а IMObject - указатель на экземпляр набора параметров устройства ввода, например, клавиатуры. IMFep не отражает состояние метода ввода. Объект IMObject инициализируется предопределенными параметрами ввода и изменяется в соответствии с получаемой информацией о событиях.

После создания объекта IMObject приложение может обрабатывать нажатия клавиш. Приложение должно передавать информацию о нажатиях клавиш в IMObject с помощью функций IMFilter и IMLookupString. Эти функции предназначены для отделения внутренней обработки IMED от пользовательского процесса преобразования нажатий клавиш.

Управление методами ввода

Ниже перечислены функции управления методами ввода:

IMInitialize Инициализирует стандартный метод ввода для указанного языка. Возвращает указатель на объект IMED, связанный с локалью. Этот указатель представляет собой непрозрачную структуру типа IMFep.
IMQueryLanguage Проверяет, поддерживается ли указанный язык.
IMCreate Создает один экземпляр указанного метода ввода. Эта функция должна быть вызвана перед обработкой событий, связанных с нажатием клавиш.
IMClose Закрывает метод ввода.
IMDestroy Удаляет экземпляр метода ввода.

Управление раскладками клавиатуры

В рамках каждого метода ввода предусмотрено несколько функций для преобразования нажатий клавиш в строку. Это преобразование выполняется в соответствии с содержимым файла imkeymap, расположенного в каталоге LOCPATH. Ниже перечислены функции преобразования:

IMInitializeKeymap Инициализирует imkeymap для указанного языка.
IMFreeKeymap Освобождает ресурсы, выделенные функцией IMInitializeKeymap.
IMAIXMapping Преобразует пару "клавиша/символ" в строку и возвращает указатель на эту строку.
IMSimpleMapping Преобразует пару "клавиша/символ" в строку и возвращает указатель на эту строку.

Обработка нажатий клавиш

Обработка ввода начинается в момент нажатия клавиши на клавиатуре. Перед вызовом перечисленных ниже функций обработки ввода приложение должно создать объект IMObject:

IMFilter Обращается к IMED для выяснения, не используется ли данное событие для внутренней обработки. Если IMED создает локализованную строку, он преобразует событие нажатия клавиши в эту строку.
IMLookupString Преобразует нажатие клавиши в локализованную строку.
IMProcessAuxiliary Сообщает методу ввода о том, что выполняется ввод для вспомогательной области.
IMIoctl Предназначена для выполнения управляющих операций и отправки запросов.

Функции callback

IMED напрямую взаимодействует с пользователем, применяя для доступа к графическим функциям приложения функции callback метода ввода (IM-CB). В ходе инициализации приложение связывает функции callback, предназначенные для вывода и запросов, с IMObject. Весь ввод при этом обрабатывается приложением.

Набор функций callback, применяемых IMED для связи с пользователем, должен предоставляться вызывающим приложением. Функции API IM-CB обсуждаются в разделе Применение функций callback.

Структуры метода ввода

Основные структуры метода ввода:

IMFepRec Содержит информацию о клиенте.
IMObjectRec Содержит общие объекты метода ввода.
IMCallback Содержит определения функций callback для IMFep.
IMTextInfo Содержит информацию о текстовой области, в частности, о строке компоновки.
IMAuxInfo Определяет содержимое вспомогательной области и тип обработки.
IMIndicatorInfo Содержит текущие значения индикаторов.
IMSTR Обозначает строки, не заканчивающиеся символом NULL.
IMSTRATT Обозначает строки, не заканчивающиеся символом NULL, и их атрибуты.

Связанная информация

Глава 16, Поддержка национальных языков .

Функции IMClose, IMCreate, IMDestroy, IMInitialize, IMInitializeKeymap, IMloctl, IMFilter, IMLookupString, IMProcessAuxiliary, IMQueryLanguage.


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]