Функция TranslateAccelerator


Функция 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
Замечания по платформе Не имеется

 

 

 

Назад в оглавление
На главную страницу
На главную страницу справки

Hosted by uCoz