VC编程之[VC++]010菜单命令的路由
小标 2018-08-14 来源 : 阅读 1342 评论 0

摘要:本文主要向大家介绍了VC编程之[VC++]010菜单命令的路由,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

本文主要向大家介绍了VC编程之[VC++]010菜单命令的路由,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

祝各位元旦快乐...元旦小放了点假,放松一下...继续前行
接着009菜单命令响应函数继续往后看,今天了解菜单命令的路由;
1.程序类对菜单命令的响应顺序
在前面的一篇中,菜单项命令是由CMainFrame类捕获的,这次我们通过建立类向导,选择别的类来实现test函数;
使用MessageBox或AfxMessageBox来提醒:
int MessageBox( LPCTSTR lpszText, LPCTSTRlpszCaption = NULL, UINT nType = MB_OK );
int AfxMessageBox( LPCTSTR lpszText, UINTnType = MB_OK, UINT nIDHelp = 0 );
由于后面两个参数有默认值,给第一个参数的值即可;
如在App,Doc,View类中都添加对Test菜单命令响应的函数;
在CMainFrame类中函数为:
void CMainFrame::OnTest() {    // TODO: Add your command handler code here    MessageBox("MainFrame Click!");}
但是由于App和Doc类不是从CWnd中派生的,所以没有MessageBox成员函数,但是可以使用AfxMessageBox;
在App类中:
void CProject004App::OnTest() {    // TODO: Add your command handler code here    AfxMessageBox("App Click!");}
在Doc类中:
void CProject004Doc::OnTest() {    // TODO: Add your command handler code here    AfxMessageBox("Doc Click!");}
在View类中:
void CProject004View::OnTest() {    // TODO: Add your command handler code here    MessageBox("View Click!");}

这时我们运行程序,点击Test;

点击确定之后发现没有别的信息,说明其它的几个响应函数没有起作用;
 
这时候我们将View类中的OnTest函数删除(右键单击OnTest,delete即可,结果如下图):
//DEL void CProject004View::OnTest() //DEL {//DEL   // TODO: Add your command handler code here//DEL   MessageBox("View Click!");//DEL }
运行程序:

再将Doc类中的函数删除并运行:

再将CMainFrame类中的函数删除并运行,最后一个显而易见就是App类了:

由此,我们知道响应Test菜单项命令的顺序依次是:View类,Doc类,Frame类,最后是App类;
2.Windows消息的分类
<1>标准消息
除WM_COMMAND之外,所有以WM_开头的消息都是标准消息。从CWnd派生的类,都可以接收这种消息;
<2>命令消息
来自菜单、加速键或工具栏按钮的消息。以WM_COMMAND形式呈现。从CCmdTarget派生的类,都可以接收这种消息;
<3>通告消息
由控件产生的消息,例如按钮的单击、列表框的选择等都会产生这类消息,目的是为了向其父窗口(通常是对话框)通知时间的发生。这类消息同样是由WM_COMMAND形式呈现。从CCmdTarget派生的类,都可以接收到这类消息。
由MSDN中,CWnd实际上派生与CCmdTarget类,所以由CWnd派生的类,既可以接收标准消息,也可接收命令消息和通过消息。由CCmdTarget派生的类,只能接收命令消息和通过消息。(这一段是按照书上直接手写的,作者总结很好,学习)
3.菜单命令的路由
重新在View类中添加Test菜单项命令响应函数;
我们发现在三个地方有关于菜单项响应函数的信息:
首先在View的头文件中,
protected:    //{{AFX_MSG(CProject004View)    afx_msg void OnTest();    //}}AFX_MSG
出现afx_msg void OnTest();
另外则是在View类的源文件中;
一处是:
BEGIN_MESSAGE_MAP(CProject004View, CView)    //{{AFX_MSG_MAP(CProject004View)    ON_COMMAND(IDM_TEST, OnTest)    //}}AFX_MSG_MAP
将菜单的ID号与命令响应函数关联起来...
另一处则是实现该函数的代码:
void CProject004View::OnTest() {    // TODO: Add your command handler code here     }

路由过程:

在本次程序中,菜单命令消息路由过程(偷个懒,截个图):
 
欢迎提点...o(∩_∩)o
     

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言VC/MFC频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved