猿问

请教下我的Detach没用错吧?

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

MMMHUHU
浏览 126回答 1
1回答

qq_遁去的一_1

这里不需要用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);很明显你这里不需要!
随时随地看视频慕课网APP
我要回答