TranslateAcceleratorA 函数 (winuser.h)

处理菜单命令的快捷键。 该函数将 WM_KEYDOWNWM_SYSKEYDOWN 消息转换为 WM_COMMANDWM_SYSCOMMAND 消息(如果指定快捷键表中有项),然后将 WM_COMMANDWM_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 结构的指针,该结构包含使用 GetMessagePeekMessage 函数从调用线程的消息队列中检索的消息信息。

返回值

类型:int

如果函数成功,则返回值为非零。

如果函数失败,则返回值为零。 若要获取扩展的错误信息,请调用 GetLastError

言论

为了区分此函数从菜单或控件发送的消息,WM_COMMANDWM_SYSCOMMAND 消息的 wParam 参数的高序单词包含值 1。

用于从 窗口选择项的快捷键组合 菜单将转换为 WM_SYSCOMMAND 消息;所有其他快捷键组合将转换为 WM_COMMAND 消息。

TranslateAccelerator 返回非零值并转换消息时,应用程序不应使用 TranslateMessage 函数再次处理消息。

加速器不需要与菜单命令相对应。

如果快捷键命令对应于菜单项,则应用程序将 WM_INITMENU 发送并 WM_INITMENUPOPUP 消息,就像用户尝试显示菜单一样。 但是,如果存在以下任何条件,则不会发送这些消息:

  • 窗口处于禁用状态。
  • 快捷键组合与 窗口 菜单上的项不对应,并且窗口最小化。
  • 鼠标捕获生效。 有关鼠标捕获的信息,请参阅 SetCapture 函数。
如果指定的窗口是活动窗口,并且没有窗口具有键盘焦点(通常为窗口最小化的情况),TranslateAccelerator 翻译 WM_SYSKEYUPWM_SYSKEYDOWN 消息,而不是 WM_KEYUPWM_KEYDOWN 消息。

如果在最小化拥有菜单的窗口时发生与菜单项对应的加速键击,TranslateAccelerator 不会发送 WM_COMMAND 消息。 但是,如果快捷键击发生与窗口菜单或 窗口 菜单中任何项不匹配的键击,该函数也会发送一条 WM_COMMAND 消息,即使窗口最小化也是如此。

例子

有关示例,请参阅 为字体属性创建加速器

注意

winuser.h 标头将 TranslateAccelerator 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows 2000 Professional [仅限桌面应用]
支持的最低服务器 Windows 2000 Server [仅限桌面应用]
目标平台 窗户
标头 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