加速键表/Accelerators
- 虽然我们可以通过监控键盘操作来相应组合案件,但是效率低下
- Accelerators 表中的记录是资源文件中关于按键组合的描述
- Accelerators 表可以多个同时存在
- 一个Accelerators表中的记录也是可以多个同时存在
- 利用资源文件我们可以快速的响应快捷键
定义Accelerators
- 打开/添加 资源文件Accelerators表
- 根据需求设置需要的组合按键
以下是一个设定好的组合案件监控,
这个记录表示监控:ctrl+a
| Alt | False |
| Ctrl | True |
| Key | A |
| Type | VIRTKEY|
| ID | ID_SELECTALL| //记住这个ID
使用Accelerators
在窗口创建完成后我们使用一下代码使 Accelerators生效
//IDC_MY 是一个Accelerators生效表的表名称,不是 Accelerators某个记录的ID
HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY));
捕获Accelerators
- Accelerators捕捉到记录对应的操作后会发送
WM_COMMAND
消息 - 当 HIWORD(wParam) == 1 并且 LOWORD(wParam)==记录ID 时表示捕获成功
case WM_COMMAND:
{
int wmId = LOWORD(wParam);
/*
捕获LoadAccelerators
HIWORD(wParam) == 1 :表示该消息时 按键消息
LOWORD(wParam) == ID_SELECTALL :表示与ID_SELECTALL 匹配
*/
if (HIWORD(wParam) == 1 && LOWORD(wParam) == ID_SELECTALL) {
SendMessageA(hEditWnd, EM_SETSEL, 0,-1);
}
}