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.
备注
为了区分该函数从菜单或控件发送的消息发送的消息,WM_COMMAND或WM_SYSCOMMAND消息的【wParam中】参数的高位字包含值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消息。
也可以看看
CreateAcceleratorTable, GetMessage, LoadAccelerators, MSG, PeekMessage, SetCapture, TranslateMessage, WM_COMMAND, WM_INITMENU, WM_INITMENUPOPUP, WM_KEYDOWN, WM_SYSKEYDOWN, WM_SYSCOMMAND