动态真彩工具栏

源代码执行效果图如下:

与VCKBASE接触良久,从来都是贪婪的从中掘取好用的东东,却没想过把自己的东西拿出来与人共享,很不好意思。

自从我的RangerChat点对点聊天工具在VCKBASE上发表以来收到众多朋友的来信。他们很多人都说一次性看这么多代码,还真不知如何从中提取自己想要的东西。现在奉上我做项目过程中的一些好的资源片段供大家评判。以后我会不间断的提供一些好的代码和大家分享。谢谢大家。

第一个:一个拥有动态真彩图标的工具栏,相信可以为大家的应用程序增色不少。

Step1:建一个单文档/多文档框架

Step2:在框架类CMainFrame中添加如下变量 CReBar m_wndReBar

Step3:添加BOOL型成员函数CreateExToolBar()

BOOL CMainFrame::CreateExToolBar()
{
  CImageList img;
  CString str;
  
  if(!m_wndReBar.Create(this))
  {
    return -1;
  }
  
  if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
    | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC))
  {
    return -1;   
  }
  
  //下面的代码是设置按钮的宽度和长度
  m_wndToolBar.GetToolBarCtrl().SetButtonWidth(40, 80);
  //下面的代码是设置"热"的位图
  img.Create(22, 22, ILC_COLOR8|ILC_MASK,2,2);
  img.SetBkColor(::GetSysColor(COLOR_BTNFACE));
  img.Add(AfxGetApp()->LoadIcon(IDI_ICON_MSG_GETBUTTON));//0收信
  .............  //省略其它按钮设置的代码,详见本文提供的源代码
  m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img);
  img.Detach();  
  
  //下面的代码是设置"冷"的位图
  img.Create(19, 19, ILC_COLOR8|ILC_MASK, 2,2);
  img.SetBkColor(::GetSysColor(COLOR_BTNFACE));
  img.Add(AfxGetApp()->LoadIcon(IDI_ICON_MSG_GETBUTTON));//0收信
  img.Add(AfxGetApp()->LoadIcon(IDI_ICON_MSG_WRITEMSGBTN));//1写信
  .............  //省略其它按钮设置的代码,详见本文提供的源代码
  m_wndToolBar.GetToolBarCtrl().SetImageList(&img);
  img.Detach();
  
  //改变属性
  m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT |CBRS_TOOLTIPS | TBSTYLE_TRANSPARENT|TBBS_CHECKBOX );
  m_wndToolBar.SetButtons(NULL,21);  
  // set up each toolbar button设置文字 
  
  m_wndToolBar.SetButtonInfo(0, IDC_WRITEMSG, TBSTYLE_BUTTON, 1);
  m_wndToolBar.SetButtonText(0, "写信");  
  
  ............ //省略其它按钮设置的代码,详见本文提供的源代码
  
  CRect rectToolBar;
  //得到按钮的大小
  m_wndToolBar.GetItemRect(0, &rectToolBar);
  //设置按钮的大小
  m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(20,20));
  
  //在Rebar中加入ToolBar
  m_wndReBar.AddBar(&m_wndToolBar);
  
  //改变一些属性
  REBARBANDINFO rbbi;
  rbbi.cbSize = sizeof(rbbi);    //这个是必须填
  rbbi.fMask = RBBIM_CHILDSIZE | RBBIM_IDEALSIZE | RBBIM_SIZE|RBBIM_BACKGROUND;
  //工具条的宽度
  rbbi.cxMinChild = rectToolBar.Width();
  //高度
  rbbi.cyMinChild = rectToolBar.Height();
  //下面这行代码是为工具条加入背景位图,请注意上rbbi.fMask中RBBIM_BACKGROUND标志
  rbbi.hbmBack = LoadBitmap(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_TOOLBARBKMAP));
  
  rbbi.cx = rbbi.cxIdeal = rectToolBar.Width() * 10;
  
  m_wndReBar.GetReBarCtrl().SetBandInfo(0, &rbbi);
  return TRUE;
}
Step4:打开OnCreate()成员函数添加如下代码

//创建扩展工具栏
If (!this->CreateExToolBar())
   return -1;

并把原先关于ToolBar的一切操作(创建、浮动)删除。

至此真彩动态工具栏已创建成功!

下面做一些说明:

No1: 工具栏中的每个按钮都要自已手动创建(见源码)

No2: 每个按钮的ID和消息处理要手动添加(在此不详述过程)

OK了,大家还不快试试。

时间: 2024-12-08 16:46:08

动态真彩工具栏的相关文章

ExtAspNet应用技巧

ExtAspNet ExtAspNet - ExtJS based ASP.NET Controls with Full AJAX Support ExtAspNet是一组专业的Asp.net控件库,拥有原生的AJAX支持和丰富的UI效果,目标是创建没有ViewState,没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序. 支持的浏览器: IE 7.0+, Firefox 3.6+, Chrome 3.0+, Opera 10.5+,

ExtAspNet应用技巧(五)

问题描述 shguo 网友在一封邮件中提到,希望能够动态创建工具栏菜单. 我理解的大致步骤如下: 1. 提供一个 menu.xml 文件: <?xml version="1.0" encoding="utf-8" ?> <menu> <menuItem text="首页" navigateurl="default.aspx" /> <menuItem text="新闻&quo

VC/MFC 工具栏上动态添加组合框等控件的方法

引言 工具条作为大多数标准的Windows应用程序的一个重要组成部分,使其成为促进人机界面友好的一个重要工具.通过工具条极大方便了用户对程序的操作,但是在由Microsoft Visual C++开发环境所创建的应用程序框架中的工具条只是一个简单的按钮的集合,在功能上也仅仅是起到了菜单快捷方式的作用,而没有做到象VC.Word等软件的工具条那样,提供多种不同类型的标准控件如组合框.编辑框等.尤其是组合框在添加到工具条上后,可将原本需要在弹出对话框中完成的交互操作在工具条上就可以进行,从而在很大程

在PowerPoint中实现表格的动态填充

我比较喜欢使用PowerPoint来制作课件,一次一位化学老师让我帮他解决这样的问题:利用PowerPoint展示一张空表,然后随着实验的进展动态地填写表格. 由于在PowerPoint中插入的表格一般是Word中的表格或Excel工作表,这种表格是一个整体,所以不能对单元格中的内容进行动态设置.我通过反复实践,问题得到了解决,具体方法如下: 1.手工绘制表格 单击"绘图"工具栏的[直线]按钮,在需要插入表格的幻灯片上手工绘制表格. 2.填写表格 单击"绘图"工具栏

php实现动态随机验证码机制

  验证码(CAPTCHA)是"Completely Automated Public Turing test to tell Computers and Humans Apart"(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序.可以防止:恶意破解密码.刷票.论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能.         这个

GIF动态图片的修改

动态  修改动态的GIF图片,我用的软件是Adobe ImageReady ,就是只要你安装了PHOTOSHOP,就会自动安装的一软件. 首先,当然是打开Adobe ImageReady后,选择"文件"->"打开",导入要处理的图片. 一.修改图片的大小:"图像"->"图像大小" 在弹出的对话框中,设好图片的大小后,点击"好". 二.对图片进行裁切:单击工具箱里的"裁切工具"

用FrontPage2000作网页--动态网页

frontpage|动态|网页  DHTML是动态网页的意思,它其实并不是一个标准的术语.事实上没有一种技术叫作DHTML.DHTML是利用CSS(层叠样式表),JavaScript,HTML等技术而建立的能与访问者产生互动的网页.比如在动态网页里,当访问者单击了某一张图片后,这张图片会自动的移动,这就是DHTML效果.也就是说,当网页下载完毕后,它无需再与服务器连接就能产生变化了.FrontPage2000提供了一套容易制作动态网页的方法,你可以建立起属于自己特色的动态网页.    使用DHT

Dreamweaver网页制作教程:常用工具栏

dreamweaver|教程|网页      "插入"栏 "插入"栏包含用于创建和插入对象(如表格.层和图像)的按钮.当鼠标指针滚动到一个按钮上时,会出现一个工具提示,其中含有该按钮的名称. 某些类别具有带弹出菜单的按钮.从弹出菜单中选择一个选项时,该选项将成为该按钮的默认操作.例如,如果从"图像"按钮的弹出菜单中选择"图像占位符",下次单击"图像"按钮时,Dreamweaver 会插入一个图像占位符.每当

Flash制作彩色线条动态图案生长动画

动态 今天我们用Flash软件制作一个彩色线条动态生长图案的动画效果,希望大家会喜欢. 首先让我们来看一下最终的效果. 点击这里下载源文件 第一步:打开Flash制作软件,新建一个400*300像素的新文件,背景颜色为黑色,如下图: 第二步:点击菜单栏"插入"→"新建元件"→设置为(名称:元件1,行为:图形),点周确定,如下图: 第三步:在元件1里,用工具栏的"线条工具"画一条粗细为1个像素的小斜线,如下图: 第四步:点击菜单栏"插入&