祝各位元旦快乐...元旦小放了点假,放松一下...继续前行
接着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
}
路由过程:
在本次程序中,菜单命令消息路由过程(偷个懒,截个图):
2014,继续努力!
欢迎提点...o(∩_∩)o
分享到:
相关推荐
更多精彩:http://blog.csdn.net/xjm199 void CProject004View::OnTest() { // TODO: Add your command handler code here }
路由命令路由命令路由命令路由命令路由命令路由命令路由命令路由命令路由命令
单臂路由和静态路由配置实验及详细命令 里面写有详细的配置命令及PT实验文件一份,零基础的朋友一定要记得下下来看。
若依前后端分离框架去掉首页 登录后跳转至动态路由的第一个路由 (第一个子菜单) 若依前后端分离框架去掉首页 登录后跳转至动态路由的第一个路由 (第一个子菜单) 若依前后端分离框架去掉首页 登录后跳转至动态...
多级菜单的图标添加及路由配置.rar
交换路由配置命令交换路由配置命令
华为路由交换命令.pdf华为路由交换命令.pdf华为路由交换命令.pdf华为路由交换命令.pdf华为路由交换命令.pdf华为路由交换命令.pdf华为路由交换命令.pdf华为路由交换命令.pdf
简单实现路由器功能的小程序 供参考 不足请批评指正
本demo根据模拟数据实现包含菜单权限和按钮权限在内的权限管理。 判断登录后,通过store.getters.router判断是否存有路由表,是的话获取当前页面按钮权限后直接next()进行跳转;否的话用axios后台取一次路由数据...
vue3.0+element-plus实现国际化语言,动态路由菜单demo
路由常用命令路由常用命令路由常用命令路由常用命令
ROS软路由全部命令及技巧自己好好用的命令大全
本程序采用MFC编程实现,模拟实现了RIP,OSPF,BGP这3种路由协议的工作原理,由此来显示各自的优缺点,以此来加强对计算机网络层路由协议算法的理解。
linux策略路由命令 手册、讲解linux策略路由的设定、转发、逻辑
高级路由配置命令高级路由配置命令高级路由配置命令
31190367-Quidway NetEngine5000E高端路由器 命令手册(V2.11)
管理网络带宽正变得越来越重要。在没有其他路由器的网络上,对网络接口... 要想正确的配置路由协议,passive-interface命令绝对不可不知。本文为大家介绍了如何通过使用passive-interface命令,来更好的进行带宽控制。
软路由ROS一些常用命令 软路由ROS一些常用命令 软路由ROS一些常用命令 软路由ROS一些常用命令
简单的 单臂路由 配置命令
无线路由命令,笔记本轻松做ap,分享wifi