将虚拟密钥消息转换为字符消息。 字符消息将发布到调用线程的消息队列,以便下次线程调用 GetMessage 或 PeekMessage 函数时读取。
语法
WINUSERAPI
BOOL
WINAPI
TranslateMessageEx(
_In_ CONST MSG *lpMsg,
_In_ UINT flags);
参数
lpMsg [in]
指向 MSG 结构的指针,该结构包含使用 GetMessage 或 PeekMessage 函数从调用线程的消息队列检索到的消息信息。
flags [in]
函数的行为。
如果设置了位 0,则菜单处于活动状态。 在此模式下,不处理 Alt+数字键盘组合键。
如果设置了位 1, 则 TranslateMessageEx 在未将WM_CHAR或WM_SYSCHAR发布到消息循环时返回 FALSE。
如果设置了第 2 位,则键盘状态不会更改 (Windows 10版本 1607 及更新)
保留 (到 31) 的所有其他位。
返回值
返回布尔值。 如果消息 (转换,即字符消息将发布到线程的消息队列) ,则返回值为非零值。
与 TranslateMessage 不同, 如果 TranslateMessageEx 不发布WM_CHAR,则 TranslateMessageEx 将返回 FALSE。
如果消息未 (也就是说,字符消息不会发布到线程的消息队列) ,则返回值为零。
-言论
TranslateMessage 函数不会修改 lpMsg 参数指向的消息。
WM_KEYDOWN 和 WM_KEYUP 组合生成 WM_CHAR 或 WM_DEADCHAR 消息。 WM_SYSKEYDOWN 和 WM_SYSKEYUP 组合生成 WM_SYSCHAR 或 WM_SYSDEADCHAR 消息。
TranslateMessage 仅为键盘驱动程序映射到 ASCII 字符的键生成 WM_CHAR 消息。
如果应用程序出于其他目的处理虚拟密钥消息,则它们不应调用 TranslateMessage。 例如,如果 TranslateAccelerator 函数返回非零值,则应用程序不应调用 TranslateMessage。 请注意,应用程序负责检索输入消息并将其调度到对话框中。 大多数应用程序为此使用main消息循环。 但是,若要允许用户移动到 并使用键盘选择控件,应用程序必须调用 IsDialogMessage。 有关详细信息,请参阅 对话框键盘接口。
此函数未在 SDK 标头中定义,必须由调用方声明。 此函数是从 user32.dll 导出的。