一个【加速器表】由一组ACCEL结构组成,每个结构都定义一个单独的加速器。每个ACCEL结构包括以下信息:
加速器的击键组合。
加速器的标识符。
*各种标志。这包括一个指定Windows是否通过突出显示相应的菜单项(如果有的话)提供可视化反馈,当使用加速器时
要处理给定线程的加速按键,开发人员必须在与线程的消息队列相关联的消息循环中调用TranslateAccelerator函数。TranslateAccelerator功能可监视消息队列的键盘输入,检查与加速表中的条目相匹配的组合键。当TranslateAccelerator找到匹配项时,它会将键盘输入(即WM_KEYUP和WM_KEYDOWN消息)转换为WM_COMMAND或WM_SYSCOMMAND消息,然后将消息发送到指定窗口的窗口过程。下图显示了加速器的处理方式。
WM_COMMAND消息包括导致TranslateAccelerator生成消息的加速器的标识符。窗口过程检查标识符以确定消息的来源,然后相应地处理消息。
加速器表存在于Windows中的两个不同级别。Windows维护一个适用于所有应用程序的单个系统级加速表。应用程序无法修改系统加速器表。有关系统加速器表提供的加速器的说明,请参阅加速键击分配.
Windows还为每个应用程序维护加速器表。应用程序可以定义任何数量的加速器表,以便与其自己的窗口一起使用。唯一的32位句柄(HACCEL)标识每个表。但是,对于给定的线程,一次只能有一个加速器表处于活动状态。传递给TranslateAccelerator函数的加速器表的句柄确定线程处于哪个加速表。可以随时通过将不同的加速器表句柄传递给TranslateAccelerator来更改主动加速器表。