Функция TranslateAccelerator обрабатывает клавиши ускорения для команд меню. Функция преобразует сообщение WM_KEYDOWN или WM_SYSKEYDOWN в сообщение WM_COMMAND или WM_SYSCOMMAND (если есть запись для клавиши в указанной таблице клавиш-ускорителей), а затем отправляет сообщение WM_COMMAND или WM_SYSCOMMAND непосредственно в соответствующую оконную процедуру. TranslateAccelerator не возвращает значения до тех пор, пока оконная процедура не обработает сообщение.
int TranslateAccelerator( HWND hWnd, HACCEL hAccTable, LPMSG lpMsg ); |
hWnd
[in] Дескриптор окна, сообщения которого должны быть преобразованы.hAccTable
[in] Дескриптор таблицы клавиш-ускорителей. Эта таблица должна быть загружена вызовом функции LoadAccelerators или создана вызовом функции CreateAcceleratorTable.lpMsg
[in] Указатель на структуру MSG, которая содержит информацию о сообщении, извлеченном из очереди сообщений вызывающего потока, при помощи использования функции GetMessage или PeekMessage.Если функция завершается успешно, возвращаемое значение не нуль.
Если функция завершается ошибкой, возвращаемое значение равняется нулю. Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError.
Чтобы отличить сообщение, которое эта функция передает, от сообщений, отправленных меню или органами управления, старшее слово параметра wParam сообщения WM_COMMAND или WM_SYSCOMMAND, содержит значение 1.
Комбинации клавиш ускорения, используемые для выбора пунктов системного меню окна переводятся в сообщения WM_SYSCOMMAND; все другие комбинации клавиш ускорения переводятся в сообщения WM_COMMAND.
Когда TranslateAccelerator возвращает ненулевое значение, а сообщение оттранслировано, приложение не должно использовать функцию TranslateMessage, чтобы обработать сообщение снова.
Не должно быть ускорителей, которые не соответствует команде меню.
Если команда ускорителя соответствует пункту меню, приложение отправляет на обработку сообщения WM_INITMENU и WM_INITMENUPOPUP, как будто пользователь попытался использовать меню на экране. Однако, эти сообщения не отправляются, если имеются нижеследующие условия:
Если заданное окно - активное окно, и никакое окно не имеет фокуса клавиатуры (ситуация, которая обычно имеет место, когда окно свернуто ), TranslateAccelerator преобразует сообщения WM_SYSKEYUP и WM_SYSKEYDOWN вместо сообщений WM_KEYUP и WM_KEYDOWN.
Если происходит нажатие клавиш ускорителя, которое соответствует пункту меню, когда окно - владелец меню, свернуто, TranslateAccelerator не отправляет сообщение WM_COMMAND. Однако, если происходит нажатие клавиш ускорителя, который не соответствует какому - либо из из пунктов в меню окна или системного меню окна, функция отправляет сообщение WM_COMMAND, даже если окно свернуто.
Пример, см. в статье Создания ускорителей для атрибутов шрифта.
Обзор Ускорители клавиатуры, Функции, используемые ускорителями клавиатуры, CreateAcceleratorTable, GetMessage, LoadAccelerators, MSG, PeekMessage, SetCapture, TranslateMessage, WM_COMMAND, WM_INITMENU, WM_INITMENUPOPUP,WM_KEYDOWN, WM_SYSKEYDOWN, WM_SYSCOMMAND
Размещение и совместимость TranslateAccelerator | ||
К | Windows XP | Да |
л | Windows 2000 Professional | Да |
и | Windows NT Workstation | Да версии 3.1 и выше |
е | Windows Me | Да |
н | Windows 98 | Да |
т | Windows 95 | Да |
С | Windows Server 2003 | Да |
е | Windows 2000 Server | Да |
р | Windows NT Server | Да версии 3.1 и выше |
в | ||
е | ||
р | ||
Используемая библиотека | User32.lib | |
Используемая DLL | - | |
Заголовочный файл | ||
- объявлено в | Winuser.h | |
- включено в | Windows.h | |
Unicode | Реализуется как версии ANSI и Unicode | |
Замечания по платформе | Не имеется |