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);  
} 

注:转载源地址



相关文章推荐

MFC VS2008中的新用户界面 ————菜单栏、工具栏和状态栏

MFC加入了新窗口元素:窗格。崭新的工具栏和状态栏都是一种窗格。  一、窗格  窗格是MFC在2008年新加入的,它由类CPane和其基类CBasePane实现。窗格就是用来在主框架窗口上占据边框位置...

VS2008中VC++添加快捷菜单

在VS2008中使用vc时候添加快捷菜单,首先利用资源管理器添加一个菜单:                                &...

MFC右键弹出菜单,并添加响应函数

遇到问题: 添加右键弹出菜单,并添加响应函数,点击菜单项却进不响应函数。 实现步骤: 1、新建一个菜单资源,IDR_TOOL_MENU。 2、在ClassWizard中 vo...

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

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

VC创建弹出式菜单

创建弹出式菜单(一)实验目的:     用户右击视窗时创建一个弹出式菜单(二)实验内容:     用CMenu::CreatePopupMenu() 和CMenu::TrackPopupMenu()创...

Apache与IIS

价格:IIS是集成于Windows操作系统中的组件,对于使用正版早作系统的来说,到也算是免费,不过,微软操作系统正版价格之高,很难让人忍受,作为服务器使用,如果不想哪天被起诉,还是选择免费的linux...

用PHP和HTML写一个简单的网站登录注册项目

首先,这是一个很简单的登陆注册页面,请不要在意美观及设计,重点在于登录注册这个功能。这个项目由五个分页组成: 1.index.php :一个简单的首页,有login  register,当用户登录之...

高效合并两个有序数组

问题: 两个有序数组,合并成一个有序数组,假设第一个数组空间足够容纳两个数组。 分析: 考虑到a数组很大,可以直接在a数组上进行合并,但是要讲究效率。如果单纯从前往后合并,那么效率会非常低,因为...

php实现登录注册功能

PHP连接MySQL数据库实现用户的登录与注册功能

MySQL、SQL Server、Oracle 3种数据库查询表中前N行记录的SQL语句

流行数据库查询前N条记录的方法: 1、MySQL: select * from T  limit N; 2、SQL Server: select top N * from T ; 3...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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