。首先创建一个动态菜单对象,有以
下两种方法:
(1)创建一个新的菜单对象
以下代码创建一个空的弹出式菜单对象:
CMenucomnu;
CreatePopupMenu()函数为菜单对comnu 创建一个空的弹出式菜单对象。然后用
AppendMenu()函数为这个新的菜单对象添加菜单项,例如:
(2)从资源中装入一个菜单对象
创建动态菜单对象,还可以直接从资源中装入,而无须在代码中手动添加菜单项。首先
依照3.2 节中的内容为应用程序工程新创建一个菜单资源,在IDE 主菜单栏中依次选择
“Insert|Resource”菜单命令,或者使用快捷键Ctrl+R,打开“Insert Resource”对话框,在列
表框中选择Menu,单击“New”按钮即可创建一个有默认资源ID 为IDR_MENU1 的新的菜
单资源,并自动进入该菜单的编辑界面,然后添加菜单项。图3-21 给出了一个已经修改好的
弹出菜单资源的例子。
图3-21 弹出式菜单资源
然后编辑视图类的源文件,在已经添加的WM_RBUTTONDOWN 消息处理函数
OnRButtonDown()中添加如下代码:
CMenucomnu;
枫叶文学网www.fywxw.com
第3 章 菜单与加速键
·59·
CMenu *psubMenucomnu.GetSubMenu(0);
LoadMenu()函数为CMenu 对象装入菜单资源,其参数为需要装入菜单资源的ID。于是
psubMenu 就指向了菜单资源IDR_MENU1 里test1 菜单对象,包含test1 菜单中的所有菜单项。
2.显示并使用弹出式菜单
在视图类的OnRButtonDown()函数中完成菜单的创建后,就可以根据鼠标光标的位置显
示弹出式菜单,代码如下:
CPoint pt;
GetCursorPos(&pt); //获得鼠标位置
变comnu 是前一小节的第一部分例子中创建的新的菜单对象。如果使用前一小节第二
部分从菜单资源中装入的菜单对象psubMenu,也可以用类似的代码显示弹出式菜单。
GetCursorPos()用于获取鼠标光标位置。TrackPopupMenu()函数在指定位置显示一个浮动
的弹出式菜单,并跟踪对其菜单项的选择。
3.销毁弹出式菜单
弹出式菜单使用完毕后,需要在视图类的OnRButtonDown 中用DestroyMenu()销毁创建
的菜单,例如:
这样就完成了整个弹出式菜单的生命周期。
编译运行程序后,在视图中单击鼠标右键,就可以打开如图3-20 所示的弹出式菜单。
3.4 创建加速键
与菜单的创建相比,加速键的创建相对简单。这是因为加速键已经自动绑定到对应的菜
单项命令消息中,当已经完成菜单项命令消息处理函数的编写时,则按下加速键后会自动产
生相应的命令消息,并通过相应的消息处理函数完成指定的cāo作。因此用户只需了解