9.9.1.5 - Функция TranslateAccelerator

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

Синтаксис

int TranslateAccelerator
(
	HWND hWnd,	// дескриптор окна назначения
	HACCEL hAccTable,	// дескриптор таблицы клавиш-ускорителей
	LPMSG lpMsg	// адрес структуры с сообщением
);

Параметры
hWnd
Идентифицирует окно, сообщения которого должны быть оттранслированы.
hAccTable
Идентифицирует таблицу клавиш-ускорителей. Таблица должна быть загружена при помощи вызова функции LoadAccelerators или создана вызовом функции CreateAcceleratorTable.
lpMsg
Указывает на структуру MSG, которая содержит информацию сообщения, извлеченного из очереди сообщений вызывающего потока при помощи использования функции GetMessage или PeekMessage.

Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения - ИСТИНА (TRUE).
Если функция не выполняет задачу, величина возвращаемого значения - ЛОЖЬ(FALSE). Чтобы получить дополнительные данные об ошибках, вызовите GetLastError.

Замечания
Чтобы отличить сообщение, которые эта функция посылает, от сообщений, отправленных меню или элементами управления, старшее слово параметра wParam сообщения WM_COMMAND или WM_SYSCOMMAND, содержит значение 1.
Комбинации клавиш - ускорителей, используемые для выбра пунктов из меню окна, транслируются в сообщение WM_SYSCOMMAND; все другие комбинации клавиш - ускорителей транслируются в сообщения WM_COMMAND.
Когда TranslateAccelerator возвращает значение отличное от нуля, а сообщение оттранслировано, прикладная программа не должна использовать функцию TranslateMessage для того, чтобы обработать сообщение снова.
Клавише - ускорителю не обязательно надо соответствовать команде меню.
Если команда клавиши - ускорителя соответствует пункту меню, прикладная программа посылает сообщения WM_INITMENU и WM_INITMENUPOPUP, как будто пользователь попытался показать меню. Однако, эти сообщения не посылаются, если встречается какое-либо из следующих условий:
Окно заблокировано.
Пункт меню заблокирован.
Комбинация клавиши - ускорителя не соответствует элементу в меню окна и окно свернуто.
Фактически был произведен захват мыши. За информацией о захвате мыши, обратитесь в функцию SetCapture.
Если определяемое окно - активное окно, и никакое другое окно не имеет фокус клавиатуры (это обычно является случаем, если окно свернуто), TranslateAccelerator транслирует сообщения WM_SYSKEYUP и WM_SYSKEYDOWN вместо сообщений WM_KEYDOWN и WM_KEYUP.
Если происходит нажатие клавиши - ускорителя, которое соответствует пункту меню, когда окно, которое владеет меню, свернуто, 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 NT			Да 
Win95				Да 
Win32s				Да 
Импортируемая библиотека		user32.lib 
Заголовочный файл			winuser.h 
Unicode				WinNT 
Замечания по платформе		Не имеется

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Владимир Соковиков.