Азбука программирования в Win32 API


Азбука программирования в Win32 API - стр. 78


Примерами акселераторов в файле ресурсов могут служить следую­щие записи:

«a», IDM_TheJFirst_Item, ALT     // определяется комбинация Alt-a

«A», IDM_The_Second_Item, ALT // определяется комбинация

Shift-Alt-a

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

Функция LoadAcceleratorQ при вызове должна получить два аргумен­та. Первый аргумент - это хэндл экземпляра программы, а второй - имя таблицы акселераторов. В результате вызова мы получаем хэндл нового объекта - таблицы акселераторов в памяти.

Но и это еще не все. Если рассуждать логически, то каждое нажатие акселераторной комбинации должно генерировать сообщение WM_COMMAND. Для этого акселераторы и создавались. Поэтому, даже после загрузки таблицы в память программа не сможет на них правильно реагировать, если мы не будем использовать функцию TranstateAccelerator(), которая преобразует сообщения от клавиатуры в сообщения WM_COMMAND. Описание этой функции можно найти в заголовочном файле winuser.h:

WINUSERAPI int WIN API TranslateAcceleratorA(HWND hWnd,

HACCEL hAccTable, LPMSG IpMsg); WINUSERAPI int WINAPI TranslateAcceleratorW(HWND hWnd,

HACCEL hAccTable, LPMSG IpMsg); «ifdefUNICODE

#define TranslateAccelerator TranslateAcceleralorW «else

#dcfine TranslateAccelcrator TranslateAccelcratorA «endif// (UNICODE

Аргументы этой функции в достаточной степени очевидны. Первый аргумент -хэндл окна, которому принадлежит меню с акселераторами, второй - хэндл табли­цы акселераторов, с помощью которой производится генерация сообщения WM_COMMAND, третий - указатель на сообщение. TranslateAcceleratorQ воз­вращает Heir/левое значение, если нажата акселераторная комбинация и нуль в противном случае. Поэтому с учетом вызова этой функции цикл обработки сооб­щений должен выглядеть следующим образом:




Начало  Назад  Вперед



Книжный магазин