MFC 中CMenu菜单的的使用

时间:2021-06-09 23:22:35

这里以生活中鼠标右键点击出来属性的菜单为例子。

第一:在工程中使用菜单控件来生成右键显示的项

第二:直接用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();

 

相关文章