键盘快捷键
快捷键是产生WM_COMMAND消息(有些情况下是WM_SYSCOMMAND)的键组合。
为什么要使用快捷键
Windows将键盘消息发送给目前活动窗口的窗口消息处理程序。然而对于快捷键,Windows把WM_COMMAND消息发送给窗口消息处理程序.该窗口消息处理程序的句柄在Windows函数TranslateAccelerator中给出快捷键中,应该避免使用Tab、Enter、Esc和Spacebar键,因为这些键常常用于完成系统功能。
快捷键表的加载
使用LoadAccelerators函数把快捷键表加载内存,并获得该表的句柄。
LoadAccelerators叙述非常类似于LoadIcon、LoadCursor和LoadMenu叙述。
HANDLE hAccel ;
hAccel = LoadAccelerators (hInstance, TEXT ("MyAccelerators")) ;
键盘代码转换
下面代码的修改是为了方便使用快捷键
while (GetMessage (&msg, NULL, 0, 0)) {
if (!TranslateAccelerator (hwnd, hAccel, &msg)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
TranslateAccelerator函数确认存放在msg消息结构中的消息是否为键盘消息。如果是,该函数将找寻句柄为hAccel的快捷键表。如果找到了一个符合的,则呼叫句柄为hwnd的窗口消息处理程序。如果快捷键ID与系统菜单的菜单项一致,则消息就是WM_SYSCOMMAND;否则,消息为WM_COMMAND。
快捷键表
当您为菜单项定义快捷键时,应该将键的组合包含到菜单项的文字中。制表符(/t)将文字与快捷键分割开,将快捷键列在第二列。
如果活动窗口已经被最小化,那么TranslateAccelerator将为与启用的系统菜单项相对应的快捷键向窗口消息处理程序发送WM_SYSCOMMAND消息, 而不是WM_COMMAND消息。
PopPad2.rc