VS已经放弃了VC6.0下那种通过控件来添加右键菜单的方法。(两者其实差不多)
VC6.0下添加右键菜单那个控件,实际就是帮你做了上面谢谢代码生成过程。 在VS下自己添加也是一样的。
具体做法——
直接响应你要添加弹出菜单的窗口的OnContextMenu,然后添加一下下面的代码就行了:
- void CMyF1Dlg::OnContextMenu(CWnd* pWnd, CPoint point)
- {
- // CG: This block was added by the Pop-up Menu component//Pop-Up Menu在代码上就添加了下面的这段
- {
- if (point.x == -1 && point.y == -1){
- //keystroke invocation
- CRect rect;
- GetClientRect(rect);
- ClientToScreen(rect);
- point = rect.TopLeft();
- point.Offset(5, 5);
- }
- CMenu menu; //后面要用的CMenu对象
- VERIFY(menu.LoadMenu(CG_IDR_POPUP_ABOUT_DLG));//此句是装载自定义的右键菜单
- CMenu* pPopup = menu.GetSubMenu(0);////获得子菜单指针(0表示获取第一个弹出菜单 )
- ASSERT(pPopup != NULL);
- CWnd* pWndPopupOwner = this;
- while (pWndPopupOwner->GetStyle() & WS_CHILD)
- pWndPopupOwner = pWndPopupOwner->GetParent();
- pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,
- pWndPopupOwner); //显示弹出菜单,参数依次为(鼠标在菜单左边|跟踪键,x,y,this)
- }
- }
注意添加的时候有些情况下会是:void CMyF1Dlg::OnContextMenu(CWnd*/*pWnd*/, CPoint /*point*/ )
只需要把.h文件和.cpp文件对应的位置都改成以下图, 就可以了。 void CMyF1Dlg::OnContextMenu(CWnd* pWnd, CPoint point)
最简要的代码方式,就四句话,也OK
CMenu m_menu;
m_menu.LoadMenu(IDR_MAINFRAME);
CMenu *popupmenu = m_menu.GetSubMenu(0);
popupmenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, pWnd, 0);