MFC学习点滴二:MFC中的菜单路由
2007-04-09 21:16
337 查看
所谓路由即是点击菜单某一项时,程序响应的顺序。
1 一般情况下。最先捕捉到菜单点击消息的是Frame类,(在Frame类中可以直接使用GetMenu() ,
而在View类中,要使用GetParent()->GetMenu()来获取系统菜单的指针。)但Frame类并不作出相应,
它会交给View类来处理,如果View类中有相应处理函数,则处理,路由结束。
否则View类会把消息交给Doc文档类来处理,如果文档类有相应的处理,则结束。
否则文档类会重新递交给View类,View类再交给Frame类,这时如果Frame类中有相应处理,则结束
否则会接着给到程序类App类中,如果App类中还没有处理,则交给操作系统。
2 也可以截断这种默认的路由,直接由Frame类来截获消息并执行。由于Frame类中的OnCommand是个
虚函数,如果我们重写它,并不再调用基类的OnCommand,那么路由只是在Frame中这里就结束了。
BOOL CMainFrame::OnCommand(WPARAM wParam , LPARAM lParam)
...{
//我们可以设置一个int来接受wParam,以此判断相应的是哪一个ID项
int nID = LOWORD(wParam);
//如果nID是我们菜单的ID值,比如 nID == ID_FILE_NEW 那么做出相应的处理
if(nID == ID_FILE_NEW)
...{
// Do something
}
//当然也可以用switch来进行多项选择
}
1 一般情况下。最先捕捉到菜单点击消息的是Frame类,(在Frame类中可以直接使用GetMenu() ,
而在View类中,要使用GetParent()->GetMenu()来获取系统菜单的指针。)但Frame类并不作出相应,
它会交给View类来处理,如果View类中有相应处理函数,则处理,路由结束。
否则View类会把消息交给Doc文档类来处理,如果文档类有相应的处理,则结束。
否则文档类会重新递交给View类,View类再交给Frame类,这时如果Frame类中有相应处理,则结束
否则会接着给到程序类App类中,如果App类中还没有处理,则交给操作系统。
2 也可以截断这种默认的路由,直接由Frame类来截获消息并执行。由于Frame类中的OnCommand是个
虚函数,如果我们重写它,并不再调用基类的OnCommand,那么路由只是在Frame中这里就结束了。
BOOL CMainFrame::OnCommand(WPARAM wParam , LPARAM lParam)
...{
//我们可以设置一个int来接受wParam,以此判断相应的是哪一个ID项
int nID = LOWORD(wParam);
//如果nID是我们菜单的ID值,比如 nID == ID_FILE_NEW 那么做出相应的处理
if(nID == ID_FILE_NEW)
...{
// Do something
}
//当然也可以用switch来进行多项选择
}
相关文章推荐
- mfc-菜单-学习笔记
- MFC学习笔记之菜单项
- MFC OnFileNew OnFileOpen过程分析代码(以记录MFC学习点滴)
- MFC学习系列之一——静态菜单的设计及实现
- MFC学习第三节:在窗口内点击左键画圆,添加菜单使圆增大。
- MFC学习之旅—动态更改菜单
- [罗振辉]MFC中菜单命令路由方式
- MFC学习笔记之菜单项
- MFC学习笔记之四————菜单编程与windows消息分类
- MFC学习点滴三:句柄,指针,对象,资源的ID
- MFC学习笔记(四)——菜单
- MFC学习:菜单
- 【MFC学习】菜单资源
- MFC学习笔记之四————菜单编程与windows消息分类
- MFC学习笔记.day03-菜单,图形标记菜单创建,菜单栏禁用,命令响应,右键弹出菜单,添加菜单
- MFC CTreeView学习之右键菜单_获取选中节点的方式HitTest和GetSelectedItem的区别(二)
- MFC学习点滴四:MFC程序的诞生与死亡
- MFC学习笔记——菜单,工具栏
- 菜鸟学习OGRE和天龙八部之十五: 添加MFC的菜单,来控制场景的显示
- 【MFC学习笔记】菜单和工具栏