为了账号安全,请及时绑定邮箱和手机立即绑定

请教下我的Detach没用错吧?

请教下我的Detach没用错吧?

MMMHUHU 2022-07-14 16:11:44
void CMy001View::OnContextMenu(CWnd* pWnd, CPoint point){// TODO: Add your message handler code hereCMenu menu;menu.LoadMenu(IDR_MENU1);GetMenu()->GetSubMenu(0)->TrackPopupMenu(TPM_RIGHTBUTTON,point.x,point.y,this);menu.Detach();}我的Detach(没用错吧!怎么还是有误呢!还是出来了那种终止,忽的那种错误,高手没看看这是为什么?
查看完整描述

1 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

这里不需要用Detach()

你这个主要产生的错误为:

GetMenu()->GetSubMenu(0)->TrackPopupMenu(TPM_RIGHTBUTTON,point.x,point.y,this);

你这个是在视图里面用GetMenu(),因为视图里面是没有菜单的.菜单是属于

框架对象的.

所以可以改为:

GetParent()->GetMenu()->GetSubMenu(0)->TrackPopupMenu(TPM_RIGHTBUTTON,point.x,point.y,this);

这样就会弹出<新建--打开--保存--打印>等菜单选项.

我估计这个不是你的原意:

你的原意应该是要弹出你加载的新菜单项,所以应该这样:

CMenu menu;
menu.LoadMenu(IDR_MENU1);
menu.GetSubMenu(0)->TrackPopupMenu(TPM_RIGHTBUTTON,point.x,point.y,this);

这样就能弹出你加载的那个菜单项了.

至于Detach();意思是从这个菜单对象中把里面的菜单剥脱出去.

所以我们可以这样用:

CMenu menu;
menu.LoadMenu(IDR_MENU1);
menu.GetSubMenu(0)->TrackPopupMenu(TPM_RIGHTBUTTON,point.x,point.y,this);
menu.Detach();
menu.LoadMenu(IDR_MENU1);
menu.GetSubMenu(1)->TrackPopupMenu(TPM_RIGHTBUTTON,point.x,point.y,this);

很明显你这里不需要!


查看完整回答
反对 回复 2022-07-18
  • 1 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号