分享

VS 2010 MFC单文档右键弹出菜单

 3dC 2015-11-26
VS 2010 MFC单文档右键弹出菜单求助
之前一直使用VC++6.0学习MFC,买的教材也是针对6.0版本的,最近才开始用VS 2010,发现好多在6.0版本中能用的代码到了2010版里面就不能用了,比如教材上的一段右键弹出菜单的代码,就出现了上述情况:
 
在菜单栏里我已经新建了一个“绘图”菜单,我希望右键单击能弹出这个菜单。具体代码如下:
void CCArrayDemoView::OnRButtonDown(UINT nFlags, CPoint point)
 {
 // TODO: 在此添加消息处理程序代码和/或调用默认值
CWnd *pWnd=AfxGetApp()->GetMainWnd();//获得窗口指针
CMenu *pMenu=pWnd->GetMenu();//获得menu指针
CMenu *submenu=pMenu->GetSubMenu(4);//获取“绘图”菜单
CPoint pt;
 GetCursorPos(&pt);//获得鼠标位置
submenu->TrackPopupMenu(TPM_LEFTALIGN,pt.x,pt.y,this);
 CView::OnRButtonDown(nFlags, point);
 }
 
运行后如果单击右键,就会出现"未经处理的异常"
 
然后指向的问题如下:
 _AFXWIN_INLINE CMenu* CMenu::GetSubMenu(int nPos) const
 { ASSERT(::IsMenu(m_hMenu)); return CMenu::FromHandle(::GetSubMenu(m_hMenu, nPos)); }
 
不知道这段代码该怎么改,俺不是计算机或者软件专业的,MFC是自学的,懂得不多,跪求高手解答。


------解决方案--------------------
可能的问题:
1、CMenu *pMenu=pWnd->GetMenu();这行代码没有取到正确的菜单指针
2、如果你的"绘图"菜单是第4个子菜单的话,获取子菜单的代码应这样写
CMenu *submenu=pMenu->GetSubMenu(3);//获取“绘图”菜单

根据你的错误提示,最有可能原因是第一个。你试试这样写:
void CCArrayDemoView::OnRButtonDown(UINT nFlags, CPoint point)
 {
CMenu oMenu;
oMenu.LoadMenu(IDR_MENUID);//IDR_MENUID指的是菜单资源的ID

CMenu* pSubMenu = oMenu.GetSubMenu(4);
CPoint pt;
GetCursorPos(&pt);//获得鼠标位置
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,pt.x,pt.y,this);

CView::OnRButtonDown(nFlags, point);
}


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    来自: 3dC > 《vc》

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多