三、Windows键盘快捷键
快捷键是产生WM_COMMAND消息(有些情况下是WM_SYSCOMMAND)的键组合。许多时候,程序使用快捷键来重复常用菜单项的动作(然而,快捷键还可以用于执行非菜单功能)。例如,许多Windows程序都有一个包含「Delete」或「Clear」选项的「Edit」菜单,这些程序习惯上都将Del键指定为该选项的快捷键。使用者可以通过「 Alt键」从菜单中选择「Delete」选项,或者只需按下快捷键 Del。当窗口消息处理程序收到一个WM_COMMAND消息时,它不必确定使用的是菜单还是快捷键。
为什么要使用快捷键
您也许会问:为什么我应该使用快捷键?为什么不能直接拦截WM_KEYDOWN或WM_CHAR消息而自己实作同样的菜单功能呢?好处又在哪里呢?对于一个单窗口应用程序,您当然可以拦截键盘消息,但是使用快捷键可以得到一些好处:您不需要把菜单和快捷键的处理方式重写一遍。
对于有多个窗口和多个窗口消息处理程序的应用程序来说,快捷键是非常重要的。正如我们所看到的,Windows将键盘消息发送给目前活动窗口的窗口消息处理程序。然而对于快捷键,Windows把WM_COMMAND消息发送给窗口消息处理程序,该窗口消息处理程序的句柄在Windows函数TranslateAccelerator中给出。通常这是主窗口,也是拥有菜单的窗口,这意味着无须每个窗口消息处理程序都把快捷键的操作处理程序重写一遍。
如果您在主窗口的显示区域中,使用了非系统模态对话框(在下一章中会讨论)或者子窗口,那么这种好处就变得非常重要。如果定义一个特定的快捷键以便在不同的窗口之间移动,那么,只需要一个窗口消息处理程序有这个处理程序。子窗口就不会收到快捷键引发的WM_COMMAND消息。