tMenu (hwnd, hMenuEdit) ; return 0 ;
其他行程式 } break ;
在WM_DESTROY讯息处理期间,NOPOPUPS将程式的功能表设定为主功能表,并呼叫DestroyMenu来清除「File」和「Edit」功能表。当视窗被清除时,主功能表将被自动清除。
键盘加速键
加速键是产生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讯息。
安排加速键的几条规则
理论上,您可以使用任何虚拟键或者字元键连同Shift键、Ctrl键或Alt键来定义加速键。然而,您 |