Чтобы обрабатывать ускорители, цикл обработки сообщений приложения (или потока) должен содержать вызов функции TranslateAccelerator. TranslateAccelerator сравнивает нажатия клавиш с таблицей клавиш-ускорителей и, если находит соответствие, то преобразует нажатия клавиш в сообщение WM_COMMAND (или WM_SYSCOMMAND). Функция затем отправляет сообщение оконной процедуре. Параметры функции TranslateAccelerator включают в себя дескриптор окна, который должны получать сообщения WM_COMMAND, дескриптор таблицы клавиш-ускорителей, используемый, чтобы преобразовывать ускорители и указатель на структуру MSG, содержащую сообщение из очереди. Пример ниже показывает, как вызвать TranslateAccelerator изнутри цикла обработки сообщений.
MSG msg;
BOOL bRet;
while ( (bRet = GetMessage(&msg, (HWND) NULL, 0, 0)) != 0)
{
if (bRet == -1)
{
// обработка ошибки и возможный выход из программы
}
else
{
// Проверка нажатий клавиш ускорителей.
if (!TranslateAccelerator(
hwndMain, // дескриптор окна приемника
haccel, // дескриптор активной таблицы ускорителей
&msg)) // данные сообщения
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
|