首先,菜单是一种资源,在资源视图中,我们可以找到默认的单文档应用程序的菜单。然后还有一些概念性的东西需要交代清楚:整个菜单上的那些“文件”、“编辑”、“查看”等等内容,称为“顶层菜单”,双击它们,你会发现它们没有ID,而且它们是“弹出”的,它们不能响应命令;而点击子菜单的“打开”、“新建”等内容,可以响应命令这些内容称为菜单项。
我们除了可以让框架类响应菜单之外,我们也可以让其他的类响应这个菜单的消息。添加的做法基本相同,但是在文档类和应用程序类中,不能直接使用MessageBox(因为他们不是从CWnd类中派生的,没有这个成员函数),而应该使用AfxMessageBox。
设定完成后,当我们点击TEST菜单后,响应的是View类,如果把View类的响应函数删掉,那么响应的是文档类,如果把文档类的响应函数删掉,那么响应的是框架类,如果把框架类的删掉,那么响应的是应用程序类。
那么这种消息响应机制到底是什么样的呢?
得从消息的分类说起,windows系统中,消息分为3类:
1.标准消息:WM开头的,除了WM_COMMAND之外的消息都是标准消息,像我们之前使用过的WM_CHAR、WM_LBUTTONDOWN等等。从CWnd派生来的类都能接受这种消息。
我们发现,不论是新建的菜单,还是子菜单,在最后总有一个虚线框起来的空位置,双击它,就能以所见即所得的方式增加它们。你也可以在已有的菜单上双击,修改菜单。对于默认添加的顶层菜单,它是它是弹出式的,不能响应命令,我们可以可以将PopUp选项去掉,然后给他设置一个编号:IDM_TEST。有了一个可以响应命令的菜单,我们可以通过类向导为它添加响应命令:在菜单上点击鼠标右键,选择建立类向导,然后选择你要响应的ID:IDM_TEST,选择你要响应的类(这里选择框架类),然后在Message中选择COMMAND,点击添加函数,编辑函数就可以了。我们在这里做一个简单的响应:使用MessageBox来发送消息:
MessageBox("MainFrame Clicked!");然后重新编译后,我们点击TEST菜单,就会收到这个消息框发送的消息了。
我们除了可以让框架类响应菜单之外,我们也可以让其他的类响应这个菜单的消息。添加的做法基本相同,但是在文档类和应用程序类中,不能直接使用MessageBox(因为他们不是从CWnd类中派生的,没有这个成员函数),而应该使用AfxMessageBox。
设定完成后,当我们点击TEST菜单后,响应的是View类,如果把View类的响应函数删掉,那么响应的是文档类,如果把文档类的响应函数删掉,那么响应的是框架类,如果把框架类的删掉,那么响应的是应用程序类。
那么这种消息响应机制到底是什么样的呢?
得从消息的分类说起,windows系统中,消息分为3类:
1.标准消息:WM开头的,除了WM_COMMAND之外的消息都是标准消息,像我们之前使用过的WM_CHAR、WM_LBUTTONDOWN等等。从CWnd派生来的类都能接受这种消息。

本文深入探讨了VC++中的MFC菜单设计。通过双击虚线框添加和编辑菜单项,设置菜单响应命令ID如IDM_TEST,并利用类向导为框架类添加对COMMAND消息的响应。在响应函数中,以MessageBox展示消息作为简单示例。
最低0.47元/天 解锁文章
1131

被折叠的 条评论
为什么被折叠?



