Учебное пособие: Подклассы окон

параметры могут быть следующими:

key определяет назначаемую клавишу

id посылаемый код извещения

type тип клавиши ASCII, VIRTKEY или опущен

options указывает состояние специальных клавиш и некоторые действия: NOINVERT, ALT, SHIFT, CONTROL или опущен.

подробнее рассмотрим назначение акселераторов на примере:

“A”, 100 // послать извещение 100 при нажатии А

65, 100, ASCII // то же самое, ASCII код 65 соответствует А

“^A”, 101 // послать 101 при нажатии Ctrl-A

“A”, 101, CONTROL // то же самое

VK_SPACE, 102, VIRTKEY // послать 102 при нажатии Space

VK_SPACE, 103, VIRTKEY, SHIFT // послать 103 принажатии Shift-Space

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

int TranslateAccelerator( hWnd, hAccel, lpMSG );

Параметр hWnd указывает окно, которое будет получать извещения, hAccel задает хендл таблицы акселераторов, lpMSG - адрес структуры MSG, содержащей сообщение.

При обычном применении акселератора извлеченное из очереди сообщение передается в эту функцию. Если это сообщение клавиатуры и данное нажатие на клавишу транслируется акселератором, то указанное окно получает сообщение WM_COMMAND и процедура возвращает TRUE; во всех остальных случаях возвращается FALSE, говоря о том, что сообщение не было трансировано в другое. Считается, что если сообщение было обработано акселератором, то дальнейшая его обработка не требуется - то есть обычный процесс трансляции и диспетчеризации этого сообщения исключается. При этом главный цикл обработки сообщений приобретает следующий вид:

MSG msg;

HACCEL hAccel;

HWND hWnd;

...

hAccel= LoadAccelerators( hInstance, “AccName” );

...

while ( GetMessage( &msg, NULL, NULL, NULL ) ) {

if ( !hAccel || !TranslateAccelerator( hWnd, hAccel, &msg ) ) {

TranslateMessage( &msg );

DispatchMessage( &msg );

}

}

...

К-во Просмотров: 588
Бесплатно скачать Учебное пособие: Подклассы окон