Поделиться через


Функция 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

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

[in] lpMsg

Тип: LPMSG

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

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

Тип: int

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

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

Замечания

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

Сочетания клавиш акселератора, используемые для выбора элементов из окна , превратятся в сообщения 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 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Виндоус
заголовка winuser.h (включая Windows.h)
библиотеки User32.lib
DLL User32.dll

См. также

концептуальные

CreateAcceleratorTable

GetMessage

ускорители клавиатуры

LoadAccelerator

MSG

PeekMessage

Справочник

SetCapture

TranslateMessage

WM_COMMAND

WM_INITMENU

WM_INITMENUPOPUP

WM_KEYDOWN

WM_SYSCOMMAND

WM_SYSKEYDOWN