MFC中如何添右键弹出菜单
2014-02-18 10:04
761 查看
VS已经放弃了VC6.0下那种通过控件来添加右键菜单的方法。(两者其实差不多)
VC6.0下添加右键菜单那个控件,实际就是帮你做了上面谢谢代码生成过程。 在VS下自己添加也是一样的。
具体做法——
直接响应你要添加弹出菜单的窗口的OnContextMenu,然后添加一下下面的代码就行了:
[cpp] view
plaincopy
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);
VC6.0下添加右键菜单那个控件,实际就是帮你做了上面谢谢代码生成过程。 在VS下自己添加也是一样的。
具体做法——
直接响应你要添加弹出菜单的窗口的OnContextMenu,然后添加一下下面的代码就行了:
[cpp] view
plaincopy
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);
相关文章推荐
- MFC中如何添右键弹出菜单
- 搞清了两个问题: 查询TCP端口状态 以及 如何弹出右键菜单
- MFC中的CMenu---如何动态添加菜单/菜单项、子菜单、右键菜单
- MFC创建右键弹出菜单,运行点击右键后出现系统崩溃
- vc++ 如何添加右键弹出菜单
- VS2013 MFC右键弹出菜单
- MFC为应用程序添加托盘(右键托盘,弹出菜单)
- MFC操作——右键弹出菜单事件
- 如何在 QWidget 窗口上弹出右键菜单
- 如何修改Pop-menu(右键弹出的菜单)的内容(Caption)
- MFC,用vs2008/2010在CView类中加入右键弹出菜单
- 如何从右键弹出菜单中清空删除数据加清空前提问确定
- MFC 右键弹出菜单
- MFC制作右键弹出菜单 指定位置
- MFC创建右键弹出菜单的方法
- WPF 如何控制右键菜单ContextMenu的弹出
- MFC-右键弹出菜单
- MFC 如何生成右键菜单
- MFC制作右键弹出菜单
- 如何右键弹出菜单中批量修改月份