6.1菜单命令响应函数
新建一个单文档工程,命名为Menu。
Resource View->Menu->IDR_MAINFRAME,双击打开下面的如图菜单资源。
整个栏就是菜单,里面的每一个按钮就是菜单项。
在帮助菜单项后面添加一个自定义菜单项:
鼠标右键单击虚线框->Properties,出现下图菜单项属性对话框,将菜单项名称->Test,即Caption编辑框->Test。
就可以出现一个自定义菜单项。
这些顶层菜单项ID都是灰色,不能修改和输入;但是这些顶层菜单项的子菜单项,例如新建,他们ID可以修改和输入。
因为,这些顶层菜单项勾选了Pop-up,是一个弹出式菜单,不能响应命令,所以没有ID。将勾选去掉,弹出式菜单项就能变成普通菜单项,可以响应命令,也可以输入修改ID。
将Test勾选去掉,将ID改为IDM_TEST。
添加Test菜单项的命令响应函数。
在Test上鼠标右键单击->ClassWizard->选择IDM_TEST的COMMMAND消息->AddFunction
单击EditCode就跳转到OnTest消息响应函数处。
在OnTest函数中添加:MessageBox(“MainFrame Clicked!”);
运行,单击Test菜单项,就会弹出该消息框。
6.2菜单命令的路由
6.2.1程序类对菜单命令的响应顺序
CMenuDoc和CMenuApp类不是从CWnd类派生而来,所以没有成员函数MessageBox,所以可以使用应用程序框架函数:AfxMessageBox函数。
响应Test菜单项命令的顺序依次是:
视类->文档类->框架类->应用程序类
6.2.2Windows消息分类
标准消息:WM_COMMAND之外,以WM开头的消息,从CWnd派生的类都可以收到该消息。
命令消息:WM_COMMAND消息,菜单栏,加速栏,工具栏按钮的消息。从CCmdTarget派生的类,CWnd,CMenuDoc和CMenuApp类可以收到该消息。
通告消息:控件产生的消息,以WM_COMMAND形式呈现。
6.2.3菜单命令的路由
给视类添加Test菜单项消息响应函数,添加了三处代码:
1、命令消息响应函数的原型
2、添加消息响应函数映射宏
3、命令消息响应函数
响应的顺序:视类->文档类->框架类->应用程序类