由AppendMenu()引发的错误

 最近一直看孙鑫的教程,有一节讲appendmenu(),看完 便自己动手延展了一下。                                      

             本想是在上下文菜单里为名叫“append”的菜单项添加一个消息响应,目的是为了在主菜单动态地添加一个popup菜单。

             用classwizard在视类中添加了相应的响应函数:

void CMenuView::OnMENUappend()
 { 
// TODO: Add your command handler code here 
CMenu menu1; 
menu1.CreateMenu(); 
GetMenu()->AppendMenu(MF_POPUP,(UINT)menu1.m_hMenu,"menubyappend"); 
menu1.Detach();
}
运行->右键->append . . .  出错

     

        一看到这个脑袋就大了。思索了一下,我以为是局部变量menu1的“局部”问题, 但是我想后面不是有Detach()吗? 问了某位网友,说是将menu1作为类的变量,虽然有疑惑,但还是照做了。  果然,还是错误。。

       为啥在CMainFrame的Oncreate()中响应不会出现错误呢?我开始想,是不是因为context菜单是属于视类的,而主菜单是属于框架类的。而在视类中不能用这种方法来做本是框架类该做的事。 所以我将视类中的OnMENUappend()移到框架类中, 右键append 果然没有出错, 但是主菜单中还是没有我要的menubyappend 。

     于是我换了一种方式,在视类中又加了OnMENUappend(),不过将代码改了:

void CMenuView::OnMENUappend()
 { 
// TODO: Add your command handler code here 
CMenu menu1; 
menu1.CreateMenu(); 
GetpParent()->GetMenu()->AppendMenu(MF_POPUP,(UINT)menu1.m_hMenu,"menubyappend"); 
GetParent()->DrawMenuBar();
menu1.Detach();
 }

       额,其中的DrawMenuBar()是为了解决主菜单不能及时刷新的问题。

       运行,append。   裸然出现了我所要的菜单项:


      但是,之前我把视类的响应函数移到框架时,为什么不起作用呢?难道是消息路由顺序的缘故吗? 

       于是百度了一下顺序:CMyView--->CMyDoc-->CMultiDocTemplate(它通常不会处理)-->CMyChildFrame-->CMyApp->CMyFrameWnd

       可见,最后还是会将消息路由给框架类的。但我的框架类中的似乎并没有相应OnMENUappend()。  百思不得其解。明天来解决吧。真的要睡了。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值