这里以生活中鼠标右键点击出来属性的菜单为例子。
第一:在工程中使用菜单控件来生成右键显示的项
第二:直接用API函数来生成右键显示的项
第一种方法比较简单,其属性可以在工程中选择。
首先创建鼠标右键的消息响应函数
然后在消息响应函数中添加如下代码
GetCursorPos(&point); //获取鼠标的当前位置
CMenu menu;//声明菜单对象
VERIFY(menu.LoadMenu(IDR_TEST_));//判断加载菜单资源是否成功
CMenu* pPopup = menu.GetSubMenu(0); //获得第一个弹出菜单的指针,也就是菜单中的第一个弹出菜单
ASSERT(pPopup != NULL); //p断言不为空
CWnd* pWndPopupOwner = this;//当前类的指针
//下面遍历主要是为找到第一个不含有WS_CHILD的窗口指针
while (pWndPopupOwner->GetStyle() & WS_CHILD)
pWndPopupOwner = pWndPopupOwner->GetParent();
//下面就是弹出菜单
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, pWndPopupOwner);
第2种
GetCursorPos(&point);
CMenu menu1;
menu1.CreatePopupMenu(); //动态创建弹出式菜单对象
menu1.AppendMenu(MF_STRING,IDR_TEST_,L" 菜单项");
menu1.InsertMenu(1,MF_BYPOSITION|MF_POPUP|MF_STRING,(UINT)IDR_TEST_,L"子菜单"); //添加子菜单
menu1.TrackPopupMenu(TPM_RIGHTBUTTON, point.x, point.y, this);
menu1.DestroyMenu();