(一)自定义工具栏

自定义工具栏,分两种情况:一是直接添加工具栏,并自己绘制图标;二是,添加工具栏,然后与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的使用总结(转)的更多相关文章

  1. VS2010/MFC编程入门之三十七(工具栏:工具栏的创建、停靠与使用)

    鸡啄米在上一节教程中讲了工具栏资源及CToolBar类,本节继续讲解工具栏的相关知识,主要内容包括工具栏的创建.停靠与使用. 工具栏的使用 上一节中鸡啄米提到过,一般情况下工具栏中的按钮在菜单栏中都有 ...

  2. VS2010-MFC(工具栏:工具栏的创建、停靠与使用)

    转自:http://www.jizhuomi.com/software/217.html 上一节教程讲了工具栏资源及CToolBar类,本节继续讲解工具栏的相关知识,主要内容包括工具栏的创建.停靠与使 ...

  3. MFC菜单、工具栏和状态栏

    菜单:CMenu类 CMenu类的主要成员函数 BOOL LoadMenu(UINT nIDResource); 加载菜单资源,并将其附加到CMenu对象上.参数nIDResource指定了要加载的菜 ...

  4. vs2008中安装dev之后输入代码会输入代码段但是报错,可能解决方法

    vs2008工具栏DevExpress→Options 取消勾选这个

  5. VC MFC在CMFCToolBar工具栏中加入组合框

    如何在CMFCToolBar工具栏中加入组合框等控件,且先看在线MSDN上怎么说的: 要增加一个组合框,需要完成以下步骤: 1.在工具栏资源中,增加一个对应ID资源号的按钮. 2.在主框架(mainf ...

  6. VS2008给图标工具栏-状态栏添加响应函数

    1.在对话框的:OnInitDialog()函数中添加以下红色代码: BOOL CGSM_MessageDlg::OnInitDialog() { CDialog::OnInitDialog(); / ...

  7. VC++ 浅谈VS2010中CMFCToolBar的用法

    本文将给大家介绍Visual Studio 2010中CMFCToolBar的用法,CMFCToolBar可以让用户自定义工具栏图标,使用静态成员函数SetUserImages()将一个CMFCToo ...

  8. 【MFC】动态创建CMFCToolbar图标不显示问题

    最近遇到一个问题,需要动态的从xml文件读取一系列图标文件,加载到一个toolbar中,由于使用的是vs2008 with sp1 feature pack,自然想到用CMFCToolbar来做,思路 ...

  9. VS2008 Debug与Release的本质区别(转)

    如何设置:工具栏“生成”→“配置管理器”→“活动解决方案配置” 对于VS2008的初次使用者来说,常会遇到的编译问题时,Debug版本运行正常,但在Release版本则不稳定或无法运行.以下是对Deb ...

随机推荐

  1. Spring学习笔记:声明式事务管理增删改查业务

    一.关于是事务 以方法为单位,进行事务控制:抛出异常,事务回滚. 最小的执行单位为方法.决定执行成败是通过是否抛出异常来判断的,抛出异常即执行失败 二.声明式事务: 声明式事务(declarative ...

  2. MongoDB 学习(二)可视化界面

    一.安装可视化界面 1.mongobooster 安装和配置 1.下载安装 下载地址:https://nosqlbooster.com/downloads 下载完成后直接点击安装: 安装完成弹出界面: ...

  3. Web前端面试指导(十七):一个满屏 品 字布局 如何设计?

    题目点评 这道题目有可能是笔试题,有可能面谈的时候进行叙述,如果是笔试题要求对css样式代码非常熟练,如果是面谈叙述,就需要你的表达能力非常强,要抓住要点,把需要用到的技能点讲清楚就可以了. 需要用到 ...

  4. Python基础-模块与包

    一.如何使用模块 上篇文章已经简单介绍了模块及模块的优点,这里着重整理一下模块的使用细节. 1. import 示例文件:spam.py,文件名spam.py,模块名spam #spam.py pri ...

  5. iDempiere 使用指南 开发环境搭建

    Created by 蓝色布鲁斯,QQ32876341,blog http://www.cnblogs.com/zzyan/ iDempiere官方中文wiki主页 http://wiki.idemp ...

  6. 【转】Web服务器之Nginx详解(理论部分)

    大纲 一.前言 二.Web服务器提供服务的方式 三.多进程.多线程.异步模式的对比 四.Web 服务请求过程 五.Linux I/O 模型 六.Linux I/O 模型具体说明 七.Linux I/O ...

  7. Vue2.0中的系统指令

    v-on注册事件 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  8. 深入理解并发编程之----synchronized实现原理

    版权声明:本文为博主原创文章,请尊重原创,未经博主允许禁止转载,保留追究权 https://blog.csdn.net/javazejian/article/details/72828483 [版权申 ...

  9. C#启动服务

    启动服务的方法有很多种,简单的cmd下dos命名,手动启动,还有C#代码启动. 我们要实现的功能: 判断是否安装 是否启动 启动服务 关闭服务 我封装了有关服务的代码,如下: using System ...

  10. linux中进入mysql时报错Access denied for user 'root'@'localhost' (using password: YES)解决方案

    之前在linux中装完mysql后直接在命令行窗口输入mysql就会进入数据库了,但是今天输入mysql命令后直接报错,如下图: 之后输入:mysql -uroot -p 提示输入密码:***** 还 ...