User and Graphics Device Interface Objects, страница 2

HACCEL CreateAcceleratorTable(

    LPACCEL  lpaccl,       // адрес массива структур с данными таблицы акселераторов

    int  cEntries     // число структур в массиве

);

Параметры

lpaccl

Указатель на массив структур ACCEL, который описывает таблицу акселераторов.

сEntries

Определяет число структур ACCEL в массиве.

Возвращаемое значение

При успешном завершении функции, возвращаемое значение – описатель созданной таблицы акселераторов.

Замечания

Прежде, чем закрыть приложение, необходимо вызвать функцию-деструктор DestroyAcceleratorTable, чтобы уничтожить каждый объект таблицы акселераторов, созданный функцией CreateAcceleratorTable.

Смотри также

ACCEL, CopyAcceleratorTable, DestroyAcceleratorTable, LoadAccelerators, TranslateAccelerator

DestroyAcceleratorTable

Функция DestroyAcceleratorTable разрушает таблицу акселераторов (accelerator table). Прежде, чем закрыть приложение, необходимо вызвать эту функцию-деструктор, чтобы уничтожить каждый объект таблицы акселераторов, созданный функцией CreateAcceleratorTable.

BOOL DestroyAcceleratorTable(

    HACCEL  hAccel     // handle of accelerator table

   );          

Параметры

hAccel

Определяет описатель таблицы акселераторов. Этот описатель должен быть создан вызовом функции CreateAcceleratorTable.

Возвращаемое значение

В случае успешного завершения, возвращаемое значение TRUE, иначе FALSE. Для получения расширенной информации по ошибке, необходимо вызвать GetLastError.

Смотри также

CopyAcceleratorTable, CreateAcceleratorTable, LoadAccelerators, TranslateAccelerator

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

Таблица акселераторов состоит из массива структур ACCEL, каждый элемент которого определяет отдельный акселератор. Структура ACCEL содержит следующую информацию:

·  Комбинацию клавиш

·  Идентификатор акселератора

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

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


Рисунок 3

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

Таблица акселераторов может быть представлена двумя различными уровнями Windows. Windows поддерживает единую, системную (system-wide) таблицу акселераторов, которая применяется ко всем приложениям. Приложение не может модифицировать системную таблицу акселераторов. Для описания акселераторов предоставленных системной таблицей акселераторов, смотри Назначение Комбинаций Клавиш Акселераторов.

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