中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > WINDOWS标准界面元素
动态真彩工具栏
作者:未知 时间:2005-07-20 14:11 出处:VC知识库 责编:chinaitpower
              摘要:动态真彩工具栏

动态真彩工具栏
作者:王健

下载本文配套源代码

源代码执行效果图如下:


与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了,大家还不快试试。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有