MFC如何在VS2008中创建弹出式菜单?

转载 2013年12月01日 23:50:09

在VS2008中,不能像VC++6.0那样通过Compnents and Controls来自动添加弹出式菜单,需要手动添加。可以采用两种方式创建弹出式菜单。

一、利用现有的菜单资源创建

(1)首先在资源视图中的Menu下新建一个菜单资源。

(2)然后将新建的菜单编辑为你想要的弹出式菜单的样子。

 

(3)再在CView类中添加WM_RBUTTONDOWN消息,在消息函数OnRButtonDown()中添加如下代码:

void CMenuView::OnRButtonDown(UINT nFlags, CPoint point)  
{  
    // TODO: 在此添加消息处理程序代码和/或调用默认值  
  
    //利用现有的菜单资源创建弹出菜单  
    CMenu menu;  
    menu.LoadMenuW(IDR_MENU1); //加载现有的菜单资源  
    CMenu *pPopupMenu = menu.GetSubMenu(0); //获取以创建好的弹出式菜单  
    ClientToScreen(&point); //转化客户区的坐标到屏幕的坐标  
    //pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, GetParent());  
    pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this); //鼠标右击弹出菜单  
  
    CView::OnRButtonDown(nFlags, point);  
}   

二、动态创建弹出菜单

动态创建弹出菜单是指完全代码型的创建,在WM_RBUTTONDOWN消息中添加如下代码:

void CMenuView::OnRButtonDown(UINT nFlags, CPoint point)  
{  
    // TODO: 在此添加消息处理程序代码和/或调用默认值  
    //动态创建弹出菜单  
    CMenu menu;  
    menu.CreatePopupMenu(); //创建一个弹出菜单  
    menu.AppendMenuW(MF_BYCOMMAND | MF_STRING, ID_RIGHT_CLEAR, _T("剪切(&X)")); //添加子菜单项  
    menu.AppendMenuW(MF_BYCOMMAND | MF_STRING, ID_RIGHT_COPY, _T("复制(&C)"));  
    menu.AppendMenuW(MF_BYCOMMAND | MF_STRING, ID_RIGHT_PASTE, _T("粘贴(&P)"));  
    menu.AppendMenuW(MF_SEPARATOR);  
    menu.AppendMenuW(MF_BYCOMMAND | MF_STRING, ID_RIGHT_CLEAR, _T("清除\tCtrl + C"));  
    ClientToScreen(&point); //将客户区的坐标转化为屏幕的坐标  
    menu.TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this); //加载弹出菜单  
  
    CView::OnRButtonDown(nFlags, point);  
} 

注:转载源地址



用VC制作带弹出式菜单的按钮(整理以后的扩展类)

//头文件#if !defined(AFX_MENUBUTTON_H__B0745FB2_A382_4B46_8C67_B5369E51CB91__INCLUDED_)#define AFX_MENU...
  • ziwen0409
  • ziwen0409
  • 2006年07月13日 11:46
  • 1182

MFC中教你怎么编写弹出式菜单

在VS2008中,不能像VC++6.0那样通过Compnents and Controls来自动添加弹出式菜单,需要手动添加。可以采用两种方式创建弹出式菜单。 一、利用现有的菜单资源创建 (1)首...
  • jiadabin
  • jiadabin
  • 2014年03月31日 18:27
  • 1961

动态建立弹出式菜单技术及其应用示例

建立一个标准EXE新工程,在窗体上添加一个Listbox和一个Text控件。 然后在窗体中粘贴下面代码:(窗体代码) Option Explicit Private Sub Form_Load()  ...
  • tanaya
  • tanaya
  • 2004年07月09日 10:11
  • 2467

QT+VS点击按钮弹出新窗口的实现

  • 2017年07月28日 09:57
  • 1.15MB
  • 下载

vs2008 创建对话框MFC应用程序调试c++代码

android 调用了不少c++生成的.so库。有时怀疑库出了问题。android方面调用的库,调试基本调试不了。所以就用vs2008 创建对话框MFC应用程序调试c++代码。以前也有以调试,久了又快...
  • qq_16064871
  • qq_16064871
  • 2016年09月22日 19:37
  • 2389

VC 创建弹出式菜单

步骤: (1) 创建一个基于对话框的应用程序 (2)在工作区选择资源视图,插入一个菜单资源,添加菜单项 (3)在对话框的头文件中声明一个CMenu类对象m_Menu (4)在OnInitDia...
  • cc7829290
  • cc7829290
  • 2013年02月05日 16:37
  • 2218

【Android】各式各样的弹出框与对菜单键、返回键的监听

Android自带各式各样的弹出框,弹出框也是安卓基本的组件之一。同时安卓程序可以对菜单键、返回键的监听,但在安卓4.0之后就禁止对Home键的屏蔽与监听,强制保留为系统守护按键,如果非要对Home键...
  • yongh701
  • yongh701
  • 2015年06月23日 09:55
  • 2670

点击按钮弹出ListView并作出相应

  • 2015年10月10日 13:10
  • 3.06MB
  • 下载

VS2010的MFC动态创建菜单

http://blog.csdn.net/password318/article/details/6898901 1、创建菜单资源 新建IDR_DYNAMIC_MENU,制作如下菜单,...
  • ruihaha
  • ruihaha
  • 2015年04月13日 10:39
  • 1604

MFC : 给主菜单动态添加删除一级子菜单

demo private: BOOL AddDyMenu(DWORD dwMenuRcId, TCHAR* pMenuName); BOOL DelDyMenu(TCHAR* pMen...
  • LostSpeed
  • LostSpeed
  • 2016年03月08日 23:28
  • 1184
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC如何在VS2008中创建弹出式菜单?
举报原因:
原因补充:

(最多只允许输入30个字)