Функция TranslateAcceleratorA (winuser.h)

Обрабатывает клавиши ускорителя для команд меню. Функция преобразует WM_KEYDOWN или WM_SYSKEYDOWN сообщение в WM_COMMAND или WM_SYSCOMMAND сообщение (если в указанной таблице ускорителя есть запись для ключа), а затем отправляет сообщение WM_COMMAND или WM_SYSCOMMAND непосредственно в указанную процедуру окна. TranslateAccelerator не возвращается, пока оконная процедура не обработает сообщение.

Синтаксис

int TranslateAcceleratorA(
  [in] HWND   hWnd,
  [in] HACCEL hAccTable,
  [in] LPMSG  lpMsg
);

Параметры

[in] hWnd

Тип: HWND

Дескриптор для окна, сообщения которого должны быть переведены.

[in] hAccTable

Тип: HACCEL

Дескриптор таблицы ускорителя. Таблица ускорителя должна быть загружена вызовом функции LoadAccelerators или создана путем вызова функции CreateAcceleratorTable .

[in] lpMsg

Тип: LPMSG

Указатель на структуру MSG , содержащую сведения о сообщении, полученные из очереди сообщений вызывающего потока с помощью функции GetMessage или PeekMessage .

Возвращаемое значение

Тип: int

Если функция выполняется успешно, возвращается ненулевое значение.

Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Чтобы отличать сообщение, отправляемое этой функцией, от сообщений, отправляемых меню или элементами управления, слово высокого порядка параметра wParamWM_COMMAND или WM_SYSCOMMAND сообщения содержит значение 1.

Сочетания клавиш ускорителя, используемые для выбора элементов в меню окна , превратятся в WM_SYSCOMMAND сообщения; все остальные сочетания клавиш ускорителя претворяются в WM_COMMAND сообщения.

Когда TranslateAccelerator возвращает ненулевое значение и сообщение преобразуется, приложение не должно использовать функцию TranslateMessage для повторной обработки сообщения.

Ускоритель не должен соответствовать команде меню.

Если команда ускорителя соответствует элементу меню, приложение отправляется WM_INITMENU и WM_INITMENUPOPUP сообщения, как если бы пользователь пытался отобразить меню. Однако эти сообщения не отправляются, если существует какое-либо из следующих условий:

  • Окно отключено.
  • Сочетание клавиш ускорителя не соответствует элементу меню окна , и окно свернуто.
  • Действует захват с помощью мыши. Сведения о захвате мыши см. в разделе Функция SetCapture .
Если указанное окно является активным и не имеет фокуса клавиатуры (как правило, это происходит, если окно свернуто), TranslateAccelerator преобразует сообщения WM_SYSKEYUP и WM_SYSKEYDOWN вместо сообщений WM_KEYUP и WM_KEYDOWN .

Если при сворачивании окна, владеющего меню, происходит нажатие клавиши ускорителя, соответствующее элементу меню, TranslateAccelerator не отправляет WM_COMMAND сообщение. Однако если происходит нажатие клавиши ускорителя, которое не соответствует ни одному из элементов меню окна или меню окна , функция отправляет WM_COMMAND сообщение, даже если окно свернуто.

Примеры

Пример см. в разделе Создание ускорителей для атрибутов шрифта.

Примечание

Заголовок winuser.h определяет TranslateAccelerator в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Использование псевдонима, не зависящий от кодирования, с кодом, который не является нейтральным для кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header winuser.h (включая Windows.h)
Библиотека User32.lib
DLL User32.dll

См. также раздел

Основные понятия

CreateAcceleratorTable

GetMessage

Сочетания клавиш

LoadAccelerators

MSG

PeekMessage

Справочные материалы

SetCapture

TranslateMessage

WM_COMMAND

WM_INITMENU

WM_INITMENUPOPUP

WM_KEYDOWN

WM_SYSCOMMAND

WM_SYSKEYDOWN