VS2008 工具栏CMFCToolBar的使用总结(转)
(一)自定义工具栏
自定义工具栏,分两种情况:一是直接添加工具栏,并自己绘制图标;二是,添加工具栏,然后与BMP关联,与VC6.0中的自定义彩色工具栏类似。
1、 自绘工具栏
1)添加Toolbar 资源,并设置工具条ID,如IDR_TOOLBAR1;编辑工具条,添加相应的项,设置项的ID,绘制各自图标的。
2)在MainFrm.h中添加Toolbar变量:
public:
CMFCToolBar m_toolbar1;
3)在MainFrm.cpp中的OnCreate中添加代码:
if((!m_toolbar1.CreateEx(this, TBSTYLE_FLAT, WS_CHILD |WS_VISIBLE |CBRS_TOP |CBRS_GRIPPER |CBRS_TOOLTIPS |CBRS_FLYBY |CBRS_SIZE_DYNAMIC,
CRect(1,1,1,1),IDR_TOOLBAR1)
|| (!m_ toolbar1.LoadToolBar(theApp.m_bHiColorIcons ? IDR_TOOLBAR1 : 0))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
m_ toolbar1.SetWindowText(_T("MyToolbar"));
…………
m_ toolbar1.EnableDocking(CBRS_ALIGN_ANY);
…………
DockPane(&m_ toolbar1);
4)为各项添加各自需要的响应事件即可。
注意,VS2008中,没有VC6.0那样方便的ClassWizard,所以,要在CMainFrame的属性的事件去找,若项ID与菜单的ID是相关联,则能在事件列表中找到相应的ID ;否则,只得靠手动添加响应事件了。
2、 位图关联工具栏
1)添加Toolbar 资源,并设置工具条ID,如IDR_TOOLBAR1;编辑工具条,添加相应的项,设置项的ID,绘制各自图标的。
2)导入自己的位图资源,,ID设为:IDB_BITMAP_TOOLBAR
3)在MainFrm.h中添加Toolbar变量:
public:
CMFCToolBar m_toolbar1;
4)在MainFrm.cpp中的OnCreate中添加代码:
if((!m_toolbar1.CreateEx(this, TBSTYLE_FLAT, WS_CHILD |WS_VISIBLE |CBRS_TOP |CBRS_GRIPPER |CBRS_TOOLTIPS |CBRS_FLYBY |CBRS_SIZE_DYNAMIC,
CRect(1,1,1,1),IDR_TOOLBAR1)
|| (!m_ toolbar1.LoadToolBar(IDR_TOOLBAR1,0,0,TRUE,0,0,IDB_BITMAP_TOOLBAR))
//与前面方法的区别在此
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
m_ toolbar1.SetWindowText(_T("MyToolbar"));
…………
m_ toolbar1.EnableDocking(CBRS_ALIGN_ANY);
…………
DockPane(&m_ toolbar1);
5)为各项添加各自需要的响应事件即可。
(二) 在工具栏上添加组合框
在网上查找到的资料:
VC2008在CMFCToolBar工具栏中加入组合框:(这种方法,我没实现了)
http://hi.baidu.com/zll2117/blog/item/80792e0fe5ce3ad87bcbe1c9.html
VC 2010:CMFCToolbar工具条中加入组合框 :(利用这种方法,实现了我所要求的功能)
http://zhanyonhu.blog.163.com/blog/static/161860442010111595752929/
总结得出,在工具栏上添加组合框的操作如下:
1)自定义ComboBox的ID。在Resource.h中定义为(自己手动添加的定义)
#define IDR_COM 32800
2)在MainFrm.h中添加工具栏组合框指针变量:
public:
CMFCToolBarComboBoxButton *m_comboButton;
3)在MainFrm.cpp中的OnCreate中添加代码:
…………
m_comboButton = new CMFCToolBarComboBoxButton(IDR_COM,
GetCmdMrg()->GetCmdImage(IDR_COM,FALSE),// 工具条位图中的图像序号
CBS_DROPDOWNLIST, //组合框类型
100); //组合框的宽度
m_ comboButton->EnableWindow(TRUE);
m_ comboButton->SetCenterVert();
m_ comboButton->SetDropDownHeight(100);//设置下拉列表的高度
m_ comboButton->SetFlatMode();
//添加内容
m_ comboButton->AddItem(_T(“Once”));
m_ comboButton->AddItem(_T(“If Only”));
m_ comboButton->AddItem(_T(“P.S.I Love You”));
m_ comboButton->AddItem(_T(“Love Me If You Dare”));
m_ comboButton->SelectItem(0);//默认选中
//添加到工具栏
m_wndToolBar.InsertSeparator();//先添加分隔条
m_wndToolBar.InsertButton(m_ comboButton);
//在使用中,遇到这个情况,MSDN中InsertButton为public成员函数,而在CMFCToolBar类的声明中却为protected成员,我解决的方法是把它改为public成员。目前我没有找其他解决方法。若以后找到,再更新。
…………
4)添加响应
1)在MainFrm.h中添加:
afx_msg void OnSelChangeClick();//SEL_CHANGE
afx_msg void OnClickComboBox();//ON_COMMAND
2)在MainFrm.cpp中添加消息映射和消息响应函数
……
ON_CBN_SELCHANGE(IDR_COM, &CMainFrame::OnSelChangeClick)
ON_COMMAND(IDR_COM, &CMainFrame::OnClickComboBox)
END_MESSAGE_MAP()
void CMainFrame::OnSelChangeClick()
{
//可以添加需要处理的代码
}
void CMainFrame::OnClickComboBox()
{
//不做任何处理,但必须添加,否则组合框是灰色不可用的
}
到此,添加操作完成。
上述所有操作,都经本人在VS2008环境下验证通过。
效果如下:
VS2008 工具栏CMFCToolBar的使用总结(转)的更多相关文章
- VS2010/MFC编程入门之三十七(工具栏:工具栏的创建、停靠与使用)
鸡啄米在上一节教程中讲了工具栏资源及CToolBar类,本节继续讲解工具栏的相关知识,主要内容包括工具栏的创建.停靠与使用. 工具栏的使用 上一节中鸡啄米提到过,一般情况下工具栏中的按钮在菜单栏中都有 ...
- VS2010-MFC(工具栏:工具栏的创建、停靠与使用)
转自:http://www.jizhuomi.com/software/217.html 上一节教程讲了工具栏资源及CToolBar类,本节继续讲解工具栏的相关知识,主要内容包括工具栏的创建.停靠与使 ...
- MFC菜单、工具栏和状态栏
菜单:CMenu类 CMenu类的主要成员函数 BOOL LoadMenu(UINT nIDResource); 加载菜单资源,并将其附加到CMenu对象上.参数nIDResource指定了要加载的菜 ...
- vs2008中安装dev之后输入代码会输入代码段但是报错,可能解决方法
vs2008工具栏DevExpress→Options 取消勾选这个
- VC MFC在CMFCToolBar工具栏中加入组合框
如何在CMFCToolBar工具栏中加入组合框等控件,且先看在线MSDN上怎么说的: 要增加一个组合框,需要完成以下步骤: 1.在工具栏资源中,增加一个对应ID资源号的按钮. 2.在主框架(mainf ...
- VS2008给图标工具栏-状态栏添加响应函数
1.在对话框的:OnInitDialog()函数中添加以下红色代码: BOOL CGSM_MessageDlg::OnInitDialog() { CDialog::OnInitDialog(); / ...
- VC++ 浅谈VS2010中CMFCToolBar的用法
本文将给大家介绍Visual Studio 2010中CMFCToolBar的用法,CMFCToolBar可以让用户自定义工具栏图标,使用静态成员函数SetUserImages()将一个CMFCToo ...
- 【MFC】动态创建CMFCToolbar图标不显示问题
最近遇到一个问题,需要动态的从xml文件读取一系列图标文件,加载到一个toolbar中,由于使用的是vs2008 with sp1 feature pack,自然想到用CMFCToolbar来做,思路 ...
- VS2008 Debug与Release的本质区别(转)
如何设置:工具栏“生成”→“配置管理器”→“活动解决方案配置” 对于VS2008的初次使用者来说,常会遇到的编译问题时,Debug版本运行正常,但在Release版本则不稳定或无法运行.以下是对Deb ...
随机推荐
- IntelliJ IDEA 安装配置
之前一直用的eclipse,以前公司的老大推荐过用这个,但是由于项目都比较赶,没及时学习. 后面这个公司的同时都用的idea,所以就换了 其实并没有那么难主要是刚刚切换时候快捷键不熟悉,打包什么的,有 ...
- shiro,基于springboot,基于前后端分离,从登录认证到鉴权,从入门到放弃
这个demo是基于springboot项目的. 名词介绍: ShiroShiro 主要分为 安全认证 和 接口授权 两个部分,其中的核心组件为 Subject. SecurityManager. Re ...
- 从MySQL到ORM(一):Centos7.x安装Mysql5.7
一.下载安装mysql 1.进入官网获取RPM包:https://dev.mysql.com/downloads/repo/yum/ 2.复制链接地址进行下载: wget https://dev.my ...
- SQLSTATE[HY000] [2002] No such file or directory in
这个错误将数据库配置信息的localhost改成127.0.0.1就行了
- AngularJS之控制器
控制器在Angularjs中的作用是增强视图,它实际就是一个函数,用来向视图中的作用域添加额外的功能,我们用它来给作用域对象设置初始状态,并添加自定义行为. 当我们在页面上创建一个控制器时,Angul ...
- 移动端h5开发相关内容总结css篇--笔记
原文参考http://mp.weixin.qq.com/s/Nho2DHj-Y59j2F62vpN9jQ 1.开发移动端,头部必要的配置<meta name="viewport&quo ...
- 数据结构与算法C语言所有头文件汇总 —— 持续更新
header.h // 顺序表的结构定义 #define Maxsize 100 //const int Maxsize = 100; // 预先定义一个足够大的常数 typedef struct { ...
- SQL计算上下两行某列的差
SELECT * FROM #TempHuDong SELECT * FROM #TempHuDong SELECT TOP 1 ABS(a.num -b.num) '差' FROM (select ...
- Python学习---重点模块之re
正则表达式是用来操作字符串,但是字符串提供的正则是完全匹配,有时候我们需要进行模糊匹配,这个时候就需要正则表达式了.通过re模块来实现,由C语言来执行底层的匹配 字符匹配(普通字符,元字符): 1 普 ...
- .C#认证考试试题汇编:第一单元:1,11 第二单元:1,11
第一单元1,11 好久没用异或都快忘了,就让我们一起来了解哈啥子事异或 说的这个,就不经意让我想起书上的几种交换值得方法了 我这儿说的交换的方法是,不使用第三个变量来交换,而是两个 实现条件是C a= ...