关于热键控件

热键控件是一个窗口,让用户能够输入要用作热键的击键组合。 热键是一个键组合,用户可以按下该组合快速执行操作。 例如,用户可以创建一个热键来激活指定窗口,并将其置于 z 顺序的顶部。 热键控制显示用户的选择,并确保用户选择了有效的组合键。 以下屏幕截图显示了用户按下 Alt 键后热键控件在对话框中的显示方式。

screen shot of a dialog box that contains a hot key control

使用热键控件

当用户输入要用作热键的组合键时,按键名称就会出现在热键控件中。 组合键可以包括修改键(如 CTRL、ALT 或 SHIFT)和辅助键(如字符键、箭头键、功能键等)。

在用户选择组合键后,应用程序会从热键控件中检索组合键,并用它来设置系统中的热键。 从热键控件中检索到的信息包括表示修改键的标志和辅助键的虚拟键代码。

应用程序可使用热键控件提供的信息来设置全局热键或特定于线程的热键。 全局热键与特定窗口相关联;它让用户能够从系统的任何部分激活该窗口。 应用程序通过使用 WM_SETHOTKEY 消息来设置全局热键。 只要用户按下全局热键,WM_SETHOTKEY 中指定的窗口就会收到 WM_SYSCOMMAND 消息,其中指定了 SC_HOTKEY 值。 此消息会激活接收它的窗口。 热键始终有效,直到调用 WM_SETHOTKEY 的应用程序退出为止。

特定于线程的热键会生成 WM_HOTKEY 消息,该消息会被发布到特定线程的起始位置,以便在消息循环的下一次迭代中删除。 应用程序通过使用 RegisterHotKey 函数来设置特定于线程的热键。

热键控件概述

在创建热键控件后,应用程序通过使用三条消息与之交互:HKM_SETRULESHKM_SETHOTKEYHKM_GETHOTKEY

应用程序可发送 HKM_SETRULES 消息,以指定一组被视为无效热键的 CTRL、ALT 和 SHIFT 组合键。 如果应用程序指定了一个无效的组合键,则还应指定一个默认的修改键组合,以便在用户选择无效组合键时使用。 当用户输入无效组合时,系统会对无效组合和默认组合执行逻辑 OR 运算。 结果将被视为有效组合;它将被转换为字符串并显示在控件中。

HKM_SETHOTKEY 消息允许应用程序为热键控件设置热键组合。 在创建热键控件时通常也会使用此消息。

应用程序使用 HKM_GETHOTKEY 消息检索用户所选热键的虚拟键代码和修改键标志。

热键控件通知

热键控制不会通过 WM_NOTIFY 消息发送任何通知代码。 但是,当用户更改控件内容时,它将通过 WM_COMMAND 消息发送 EN_CHANGE 通知。

默认热键消息处理

本节介绍窗口过程处理的窗口消息,这些消息用于预先定义的 HOTKEY_CLASS 窗口类并与热键控件一起使用。

Message 已执行的处理
WM_CHAR 检索虚拟键代码。
WM_CREATE 初始化热键控件,清除所有热键规则,并使用系统字体。
WM_ERASEBKGND 隐藏脱字符号,调用 DefWindowProc 函数,并再次显示脱字符号。
WM_GETDLGCODE 返回 DLGC_WANTCHARSDLGC_WANTARROWS 值的组合。
WM_GETFONT 检索字体。
WM_KEYDOWN 如果按键为 ENTER、TAB、SPACE BAR、DEL、ESC 或 BACKSPACE,则调用 DefWindowProc 函数。 如果按键是 SHIFT、CTRL 或 ALT,则它会检查组合键是否有效,如果有效,则使用组合键来设置热键。 所有其他按键都会被设为热键,而无需先检查其有效性。
WM_KEYUP 检索虚拟键代码。
WM_KILLFOCUS 销毁脱字符号。
WM_LBUTTONDOWN 将焦点设置为窗口。
WM_NCCREATE 设置 WS_EX_CLIENTEDGE 窗口样式。
WM_PAINT 绘制热键控件。
WM_SETFOCUS 创建并显示脱字符号。
WM_SETFONT 设置字体。
WM_SYSCHAR 检索虚拟键代码。
WM_SYSKEYDOWN 如果按键为 ENTER、TAB、SPACE BAR、DEL、ESC 或 BACKSPACE,则调用 DefWindowProc 函数。 如果按键是 SHIFT、CTRL 或 ALT,则它会检查组合键是否有效,如果有效,则使用组合键来设置热键。 所有其他按键都会被设为热键,而无需先检查其有效性。
WM_SYSKEYUP 检索虚拟键代码。