MFC中如何添右键弹出菜单

来源:互联网 发布:sql修改字段绑定默认值 编辑:程序博客网 时间:2024/05/22 06:21

VS已经放弃了VC6.0下那种通过控件来添加右键菜单的方法。(两者其实差不多)

VC6.0下添加右键菜单那个控件,实际就是帮你做了上面谢谢代码生成过程。 在VS下自己添加也是一样的。

具体做法——

直接响应你要添加弹出菜单的窗口的OnContextMenu,然后添加一下下面的代码就行了:  

[cpp] view plaincopy
  1. void CMyF1Dlg::OnContextMenu(CWnd* pWnd, CPoint point)   
  2. {  
  3.     // CG: This block was added by the Pop-up Menu component//Pop-Up Menu在代码上就添加了下面的这段  
  4.     {  
  5.         if (point.x == -1 && point.y == -1){  
  6.             //keystroke invocation  
  7.             CRect rect;  
  8.             GetClientRect(rect);  
  9.             ClientToScreen(rect);  
  10.   
  11.             point = rect.TopLeft();  
  12.             point.Offset(5, 5);  
  13.         }  
  14.   
  15.         CMenu menu;  //后面要用的CMenu对象
  16.         VERIFY(menu.LoadMenu(CG_IDR_POPUP_ABOUT_DLG));//此句是装载自定义的右键菜单
  17.   
  18.         CMenu* pPopup = menu.GetSubMenu(0);////获得子菜单指针(0表示获取第一个弹出菜单 ) 
  19.         ASSERT(pPopup != NULL);  
  20.         CWnd* pWndPopupOwner = this;  
  21.   
  22.         while (pWndPopupOwner->GetStyle() & WS_CHILD)  
  23.             pWndPopupOwner = pWndPopupOwner->GetParent();  
  24.   
  25.         pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,  
  26.             pWndPopupOwner); //显示弹出菜单,参数依次为(鼠标在菜单左边|跟踪键,xythis) 
  27.     }  
  28. }  

注意添加的时候有些情况下会是: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);


0 0
原创粉丝点击