三、Windows键盘快捷键—接收快捷键消息
当快捷键与系统菜单中的菜单项相对应时,TranslateAccelerator给窗口消息处理程序发送一个WM_SYSCOMMAND消息,否则,TranslateAccelerator给窗口消息处理程序发送一个WM_COMMAND消息。下表所示为几种可能接收到的WM_COMMAND消息,这些消息用于快捷键、菜单命令以及子窗口控件:
表10-3 |
快捷键 |
菜单 |
控件 |
|
LOWORD (wParam) |
快捷键ID |
菜单ID |
控件ID |
HIWORD (wParam) |
1 |
0 |
通知码 |
lParam |
0 |
0 |
子窗口句柄 |
如果快捷键与一个菜单项对应,那么窗口消息处理程序还会收到WM_INITMENU、WM_INITMENUPOPUP和WM_MENUSELECT消息,就好像选中了菜单选项一样。在处理WM_INITMENUPOPUP时,程序往往启用和禁用弹出式菜单中的菜单项,因此,在使用快捷键时,您仍然能够实作这类功能。如果快捷键与一个禁用或者无效化的菜单项相对应,那么,TranslateAccelerator函数就不会向窗口消息处理程序发送WM_COMMAND或WM_SYSCOMMAND消息。
如果活动窗口已经被最小化,那么TranslateAccelerator将为与启用的系统菜单项相对应的快捷键向窗口消息处理程序发送WM_SYSCOMMAND消息,而不是WM_COMMAND消息。TranslateAccelerator也会为没有任何菜单项与之对应的快捷键,来向窗口消息处理程序发送WM_COMMAND消息。