您的位置:首页 > 其它

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: