当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 动态真彩工具栏

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++ 中的 动态真彩工具栏


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 52 ::
收藏到网摘: n/a

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

下载本文配套源代码

源代码执行效果图如下:


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