VS2012中,为MFC程序添加右键菜单

本文是读者在学习孙鑫的《VC++深入详解》时,对一些在VS2012与VC6.0不同地方,需要修改的代码进行整理得到的。
在VC++6.0中,在project -》addtoproject-》……之后进行选择就可以为工程添加一个单击右键弹出菜单功能,但是在VS中没有Pop-UpMenu组件,右键菜单需要手动添加。
添加方法如下:
1、 在资源视图中添加所需的右键菜单
2、选择相应的类,单文档时选中View类在属性中添加WM_CONTEXTMENU消息
3、 在OnContextMenu添加如下代码
void CMainFrame::OnContextMenu(CWnd*, CPoint point)
 {
  if (point.x == -1 && point.y == -1)           //判断是否在窗口外面
  {
   CRect rect;
   GetClientRect(rect);  //得到窗口客户区的大小      
   ClientToScreen(rect); //转化为屏幕坐标
   point = rect.TopLeft();//获取左上角坐标
   point.Offset(5, 5);    //坐标偏移5,5
  }
  //上面主要是个定位问题,也就是求出弹出菜单的显示位置
  //可以自己改

CMenu menu;//声明菜单对象
  VERIFY(menu.LoadMenu(CG_IDR_POPUP_MAIN_FRAME));//判断加载菜单资源是否成功
  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);
 }

你可能感兴趣的:(MFC)