TranslateAcceleratorA 函数 (winuser.h)

处理菜单命令的快捷键。 如果指定快捷键表中) 键有条目,函数会将WM_KEYDOWN或WM_SYSKEYDOWN ( 消息转换为WM_COMMAND或WM_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 [仅限桌面应用]
目标平台 Windows
标头 winuser.h (包括 Windows.h)
Library User32.lib
DLL User32.dll

请参阅

概念性

CreateAcceleratorTable

GetMessage

键盘加速键

LoadAccelerators

味精

PeekMessage

引用

SetCapture

TranslateMessage

WM_COMMAND

WM_INITMENU

WM_INITMENUPOPUP

WM_KEYDOWN

WM_SYSCOMMAND

WM_SYSKEYDOWN