MFC学习点滴二:MFC中的菜单路由

本文介绍了MFC中菜单路由的工作原理。通常,菜单点击事件首先由Frame类捕获,然后传递给View类,接着是Document类,如果这些类都没有响应,则返回给Frame类,最后可能到达App类。可以通过重写Frame类的OnCommand函数来截断默认路由。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

所谓路由即是点击菜单某一项时,程序响应的顺序。

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来进行多项选择

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值