Загрузка таблицы быстрых клавиш




Тема: Создание и использование акселераторов

Основные понятия

Акселераторы – сочетание клавиш, представляющие быстрые клавиши для определенной задачи и генерирующие сообщения WM_COMMAND (в некоторых случаях WM_SYSCOMMAND).

Например, применяя комбинации клавиш Ctrl+C для копирования данных в буфер обмена, пользователь использует акселератор.

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

Таблица акселераторов находится в ресурсах приложения и определяет соответствие между комбинациями клавиш и значением младшего слова параметра wParam сообщения WM_COMMAND, попадающего в функцию окна, когда происходит нажатие этих клавиш.

Акселераторы интерпретируются приложением при вызове функции TranslateAccelerator после получения сообщения с помощью функции GetMessage (или PeekMessage). Функция TranslateAccelerator транслирует сообщение WM_KEYDOWN (или WM_SYSKEYDOWN) в сообщение WM_COMMAND (или WM_SYSCOMMAND).

Замечание. Для многооконных приложений с множеством оконных процедур акселераторы очень важны.

  • Как известно, Windows посылает сообщения клавиатуры оконной процедуре того окна, которое в данный момент имеет фокус ввода. Однако в случае нажатия быстрых клавиш Windows посылает сообщение WM_COMMAND той оконной процедуре, чей дескриптор задан в функции TranslateAccelerator.

Как правило, этой процедурой является оконная процедура главного окна приложения, т.е. того окна, у которого есть меню.

Таблица акселераторов

Быстрые клавиши определяются в файле описания ресурсов при помощи таблицы ACCELERATORS. В файле описания ресурсов может быть несколько таблиц ACCELERATORS, они идентифицируются или строковым именем, или числовым идентификатором (подобно другим ресурсам):

ИдентификаторИлиИмя ACCELERATORS

BEGIN

// определения быстрых клавиш

END

  • Оператор акселератора, заключенный между ключевых слов BEGIN-END содержит произвольное количество событий клавиатуры, за которыми следуют идентификаторы акселератора. Для каждой определяемой быстрой клавиши необходима отдельная строка таблицы.

Имеется четыре типа определения быстрых клавиш:

“char”, id, [, SHIFT] [, CONTROL] [, ALT]

“^char”, id, [, SHIFT] [, CONTROL] [, ALT]

nCode, id, ASCII [, SHIFT] [, CONTROL] [, ALT]

nCode, id, VIRTKEY [, SHIFT] [, CONTROL] [, ALT]

Обозначение “char” означает один чувствительный к регистру символ, заключенный в двойные кавычки, а “^char” – это символ ^ (Ctrl) и один чувствительный к регистру символ, заключенные в двойные кавычки. Если вместо символа в кавычках используется число, то оно интерпретируется либо как чувствительный к регистру ASCII-код символа, либо как код виртуальной клавиши, в зависимости от наличия ключевого слова ASCII или VIRTKEY.

Наиболее часто используются определения второго и четвертого типа. В определении второго типа буквенная клавиша используется в сочетании с клавишей <Ctrl>. Определения четвертого типа используются для виртуальных кодов клавиш, таких как функциональные клавиши.

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

Рассмотрим пример таблицы акселераторов, в которой определяются быстрые клавиши <Shift+F1>, символ I в верхнем регистре и акселератор для быстрого доступа к пункту меню с идентификатором ID_ITEM1.

MyAccel ACCELERATORS

BEGIN

VK_F1, ID_HELP, VIRTKEY, SHIFT

"I", ID_INFO,

VK_F6, ID_ITEM1, VIRTKEY, CONTROL

END

Замечание. Отметим, что при определении быстрых клавиш для пунктов меню рекомендуется включить описание комбинации быстрых клавиш в текст соответствующих пунктов меню, разделяя текст и описание при помощи символа табуляции (\t).

Загрузка таблицы быстрых клавиш

Внутри программы для загрузки таблицы акселераторов в память и получения ее дескриптора используется функция LoadAccelerators. Инструкция с функцией LoadAccelerators очень похожа на аналогичные инструкции с LoadIcon, LoadCursor, LoadBitmap и LoadMenu:

HACCEL hAccel=LoadAccelerators(hInst,"MyAccel");

  • Как и в случаях с пиктограммами, курсорами, битовыми образами и меню, вместо имени таблицы быстрых клавиш можно использовать число (идентификатор таблицы), которое затем будет использоваться в инструкции, содержащейся функцию LoadAccelerators и макрос MAKEINTRESOURCE:

HACCEL hAccel=LoadAccelerators(hInst,MAKEINTRESOURCE(IDR_ACCEL1));

Загруженная таблица акселераторов автоматически уничтожается при завершении работы приложения.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-02 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: