Win32 API. Быстрые клавиши
Страница 2. Таблицы клавиш-ускорителей


 

Таблицы клавиш-ускорителей

Таблица клавиш – ускорителей (accelerator table) состоит из массива структур ACCEL, каждая из которых определяет конкретный акселератор. Каждая структура ACCEL включает в себя следующую информацию:

  1. Комбинацию нажатия клавиши - ускорителя.
  2. Идентификатор акселератора.
  3. Различные флажки. Эти флажки включают в себя и тот, который определяет, должен ли Windows предоставлять визуальную обратную связь, когда акселератор использован, высвечивая соответствующий пункт меню, если он есть в наличии.

Чтобы обрабатывать нажатия клавиш - акселераторов для данного потока, разработчик должен вызвать функцию TranslateAccelerator в цикле сообщения, связанном с очередью сообщений потока. Функция TranslateAccelerator контролирует ввод с клавиатуры в очереди сообщений, проверяя комбинации клавиш, которые соответствуют элементу в таблицах клавиш - ускорителей. Когда TranslateAccelerator находит соответствие, она переводит ввод с клавиатуры (то есть сообщения WM_KEYUP и WM_KEYDOWN) в сообщение WM_COMMAND или WM_SYSCOMMAND, а затем отправляет сообщение оконной процедуре определяемого окна. 

Сообщение WM_COMMAND включает в себя идентификатор клавиши-ускорителя, которая заставила TranslateAccelerator сгенерировать сообщение. Оконная процедура проверяет идентификатор, чтобы определить источник сообщения, а затем соответственно обрабатывает сообщение.

В Windows таблицы клавиш-ускорителей существуют на двух различных уровнях. Windows поддерживает единственную, на системном уровне таблицу клавиш-ускорителей, которая применяется всеми прикладными программами. Прикладная программа не может изменить системную таблицу акселераторов. За описанием клавиш - ускорителей, предусмотренных системной таблицей акселераторов, обратитесь к статье Предназначения нажатий клавиш - ускорителей.

Windows поддерживает также и таблицы клавиш – ускорителей для каждой прикладной программы. Приложение может определять любое число таблиц акселераторов для использования своими собственными окнами. Уникальный 32-разрядный дескриптор (HACCEL) идентифицирует каждую таблицу. Однако только одна таблица клавиш – ускорителей одновременно может быть активна для данного потока. Дескриптор таблицы клавиш - ускорителей, передаваемый в функцию TranslateAccelerator, определяет, какая таблица акселераторов является активной для потока. Активная таблица акселераторов может быть переопределена в любое время, при помощи передачи соответствующего дескриптора таблицы клавиш-ускорителей в TranslateAccelerator.

 

 
Следующая статья »