所谓路由即是点击菜单某一项时,程序响应的顺序。
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中菜单路由的工作原理。通常,菜单点击事件首先由Frame类捕获,然后传递给View类,接着是Document类,如果这些类都没有响应,则返回给Frame类,最后可能到达App类。可以通过重写Frame类的OnCommand函数来截断默认路由。
2228

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



