Win32 API. Быстрые клавиши - Таблицы клавиш-ускорителей
ОГЛАВЛЕНИЕ
Таблицы клавиш-ускорителей
Таблица клавиш – ускорителей (accelerator table) состоит из массива структур ACCEL, каждая из которых определяет конкретный акселератор. Каждая структура ACCEL включает в себя следующую информацию:
- Комбинацию нажатия клавиши - ускорителя.
- Идентификатор акселератора.
- Различные флажки. Эти флажки включают в себя и тот, который определяет, должен ли Windows предоставлять визуальную обратную связь, когда акселератор использован, высвечивая соответствующий пункт меню, если он есть в наличии.
Чтобы обрабатывать нажатия клавиш - акселераторов для данного потока, разработчик должен вызвать функцию TranslateAccelerator в цикле сообщения, связанном с очередью сообщений потока. Функция TranslateAccelerator контролирует ввод с клавиатуры в очереди сообщений, проверяя комбинации клавиш, которые соответствуют элементу в таблицах клавиш - ускорителей. Когда TranslateAccelerator находит соответствие, она переводит ввод с клавиатуры (то есть сообщения WM_KEYUP и WM_KEYDOWN) в сообщение WM_COMMAND или WM_SYSCOMMAND, а затем отправляет сообщение оконной процедуре определяемого окна.
Сообщение WM_COMMAND включает в себя идентификатор клавиши-ускорителя, которая заставила TranslateAccelerator сгенерировать сообщение. Оконная процедура проверяет идентификатор, чтобы определить источник сообщения, а затем соответственно обрабатывает сообщение.
В Windows таблицы клавиш-ускорителей существуют на двух различных уровнях. Windows поддерживает единственную, на системном уровне таблицу клавиш-ускорителей, которая применяется всеми прикладными программами. Прикладная программа не может изменить системную таблицу акселераторов. За описанием клавиш - ускорителей, предусмотренных системной таблицей акселераторов, обратитесь к статье Предназначения нажатий клавиш - ускорителей.
Windows поддерживает также и таблицы клавиш – ускорителей для каждой прикладной программы. Приложение может определять любое число таблиц акселераторов для использования своими собственными окнами. Уникальный 32-разрядный дескриптор (HACCEL) идентифицирует каждую таблицу. Однако только одна таблица клавиш – ускорителей одновременно может быть активна для данного потока. Дескриптор таблицы клавиш - ускорителей, передаваемый в функцию TranslateAccelerator, определяет, какая таблица акселераторов является активной для потока. Активная таблица акселераторов может быть переопределена в любое время, при помощи передачи соответствующего дескриптора таблицы клавиш-ускорителей в TranslateAccelerator.