Чтобы обрабатывать ускорители, цикл обработки сообщений приложения (или потока) должен содержать вызов функции 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); } } } |