背景:因为对话框界面上的空间有限,为了节省空间,我决定采用一个MFCMenuButton用来实现同一类按钮事件。本来我打算设置两个按钮:“单个删除文件”和“清空所有文件”两个按钮,但是空间太小,而且这两个按钮的功能相似,所以,我干脆将这两个按钮组合成为一个按钮,采用下拉菜单选择的方式分别触发按钮事件。

首先,需要创建一个菜单资源。如果资源视图中没有Menu文件夹,则需要在资源视图窗口右击后缀为.rc的文件夹,选择添加资源,弹出对话框。

在弹出的对话框中选择Menu,之后点击新建按钮。在新建的Menu上面设置下拉菜单每个选项的名字。

分别设置两个选项的ID如下所示。

好了,现在这个名字叫做"IDR_MENU1"的菜单就编辑好了,下面在MFCMenuButton中调用该菜单资源即可。

首选,需要新建一个MFCMenuButton的控件,然后添加关联变量,假设为m_MenuButton1。

在对话框的OnInitDialog()函数中插入下面的代码,载入菜单资源。

 CMenu* pMenu = new CMenu;
pMenu->LoadMenu(IDR_MENU1); //载入菜单资源
m_MenuButton1.m_hMenu = pMenu->GetSubMenu()->GetSafeHmenu();

在按钮事件中插入下面的代码进行测试。

void CTABPAGE2::OnBnClickedMfcmenubuttonDelete1()
{
// TODO: 在此添加控件通知处理程序代码
if(m_MenuButton1.m_nMenuResult == ID_X_Single)
{
AfxMessageBox(_T("单个删除文件!"));
}
else if(m_MenuButton1.m_nMenuResult == ID_X_All)
{
AfxMessageBox(_T("删除全部文件"));
} return;
}

弹出对话框的部分替换成为功能语句即可分别完成不同的功能。

【MFC】MFCMenuButton 的用法的更多相关文章

  1. 【转】MFC下拉列表框的用法

    原文网址:http://blog.csdn.net/kinglimy/article/details/6452239 Combo Box (组合框)控件很简单,可以节省空间.从用户角度来看,这个控件是 ...

  2. MFC之MessageBox用法

    一    函数原型及参数 function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer; hWnd:对话框父窗口 ...

  3. MFC CSplitterWnd的用法

    用MFC开发一个软件界面中需要拆分多个试图窗口时,使用CSplitterWnd类  CSplitterWnd类主要用在创建一个拆分试图窗口.通常嵌入在框架窗口中(CMainFrame) 创建步骤: 1 ...

  4. MFC 控件用法

    1:IP Control 变量CIPAddressCtrl m_iAddr 关联DDX_Control(pDX,IDC_IPADDRESS1,m_iAddr); 设置地址:m_iAddr.SetAdd ...

  5. MFC中CFileDialog用法

    用CFileDialog选择了一个文件后,使用FILE::fopen打开文件错误,使用 的是相对地址,和王工调试了半天,怎么跟踪也没发现错误,原来如此......... CFileDialog文件选择 ...

  6. MFC 的SetWindowPos 用法

    转自于:http://hi.baidu.com/max_new/blog/item/e2bbe607b1f127c57b8947c0.html 许多软件,特别是占桌面面积不是很大的软件,通常都提供了一 ...

  7. MFC的定时器OnTimer

    本文总结来源出自鸡啄米,感谢鸡啄米.来源:http://www.jizhuomi.com/software/232.html 定时器简介 定时器,可以帮助开发者或者用户定时完成某项任务.在使用定时器时 ...

  8. MFC ListControl使用方法

    在原来博客中有:MF CListControl 简单功能使用 推荐文章:MFC类CtrlList用法 今天又又一次来介绍点新东西:双击击listcontrol  做出响应.当然你能够做的还有非常多,比 ...

  9. VS2010/MFC编程入门之四十四(MFC常用类:定时器Timer)

    前面一节鸡啄米讲了CTime类和CTimeSpan类的使用,本节继续讲与时间有关的定时器.定时器并不是一个类,主要考虑到,提起时间的话就不能不说定时器,所以就把它放到CTime和CTimeSpan之后 ...

随机推荐

  1. java之Scanner

    参考http://how2j.cn/k/operator/operator-scanner/658.html#nowhere 需要用到从控制台输入数据,所以需要用到Scanner类 使用Scanner ...

  2. Entity Framework Code-First(6):Database Initialization

    Database Initialization: We have seen that Code First creates a database automatically in the Simple ...

  3. C#面向对象三大特性之三:多态

    比起前面的封装和继承,多态这个概念不是那么好理解.我们还是从一个事例开始: 公司最近为了陶冶情操,养了几种动物(Animal),有猫(Cat).狗(Dog).羊(Sheep),这些动物都有共同的特性, ...

  4. HBase高可用原理与实践

    前言 前段时间有套线上HBase出了点小问题,导致该套HBase集群服务停止了2个小时,从而造成使用该套HBase作为数据存储的应用也出现了服务异常.在排查问题之余,我们不禁也在思考,以后再出现类似的 ...

  5. Ubuntu使用技巧

    命令 获取系统安装包的编译源码及脚本 apt-get source package 查询端口被占用的进程 lsof -i:端口号 配置 配置阿里源 # mv /etc/apt/source.list ...

  6. IOS swift实现密码的显示与隐藏切换

    最近做项目遇到一个需要做密码的显示与隐藏功能,简单从功能上讲是比较简单的,但是,ios有个恶心的BUG,就是在切换显示密码后再隐藏密码时输入就被清空了,这个非常不友好,为了解决这个问题,我在网上找了相 ...

  7. 源代码实现一个binary例子

    一.源代码实现一个binary例子 1.例子描述 (1) 数据描述 输入数据X是二进制的一串序列, 在t时刻,有50%的概率是1,50%的概率是0,比如:X=[1,1,0,0,1,0.....]输出数 ...

  8. Android OpenGLES2.0(十七)——球形天空盒VR效果实现

    在3D游戏中通常都会用到天空盒,在3D引擎中也一般会存在天空盒组件,让开发者可以直接使用.那么天空盒是什么?天空盒又是如何实现的呢?本篇博客主要介绍如何在Android中利用OpenGLES绘制一个天 ...

  9. 当重装eclipse后,给现有web项目添加tomcat的构建路径

    在eclipse“首选项”-“service environment”中配置好tomcat后,给现有web项目添加构建路径: 1.选中一个web项目右键选中“构建路径”-“配置构建路径”

  10. Maven下把父项目下的子项目导出到myeclipse中

    第一种在父项目下已有子项目:右击空白------import 第二步Maven4MyEclipse-----------Existing  Maven  Projects 第三部选择父项目下面的子项目 ...