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); } |
|