加载真彩色工具栏

本文介绍如何使用VisualToolbar工具将图片转换为工具条,并通过CtrueColorToolBar类在VC环境中加载多个自定义工具条到同一工具栏,实现工具条的多样化显示。

首先利用Visual Toolbar工具将自.bmp图片制作成工具条。Visual Toolbar工具可以利用Google去搜,尽管这款软件需要注册,但笔者不提倡下载注册机破解注册或者直接下载破解版。

然后在VC的资源中添加工具栏,导入已经制作好的工具条(此时为bmp格式),然后利用CtrueColorToolBar 类加载图片到工具条。CtrueColorToolBar 类的下载地址为:http://www.codeproject.com/docking/TrueColorToolBar.asp

以上两步可以参考《一步步制作真彩工具条》。

接下来就要将多个工具条加载到同一个工具栏里。我也是在网上找到的源代码,然后自己修改。不便赘述,直接贴上代码:

int CMainFrame::OnCreate(LPCREATESTRUCTlpCreateStruct)
... {
if(CMDIFrameWnd::OnCreate(lpCreateStruct)==-1)
return-1;

if(!m_wndToolBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP|
CBRS_FLOAT_MULTI
|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
...{
TRACE0(
"未能创建工具栏 ");
return-1;//未能创建
}


if(!m_wndStatusBar.Create(this)||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
...{
TRACE0(
"未能创建状态栏 ");
return-1;//未能创建
}


//TODO:如果不需要工具栏可停靠,则删除这三行
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(
&m_wndToolBar);

CRectrect;
//创建属性工具栏
//m_ProperBar.SetBorders(1,1,1,1);
if(!m_ProperBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP|
CBRS_FLOAT_MULTI
|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)||
!m_ProperBar.LoadToolBar(IDR_TOOLBAR_PROPER))
...{
TRACE0(
"未能创建缩放工具栏 ");
return-2;//未能创建
}

m_ProperBar.LoadTrueColorToolBar(
16,IDB_BITMAP_PROPER_HOT,IDB_BITMAP_PROPER_HOT,IDB_BITMAP_PROPER_DISABLED);
m_ProperBar.GetWindowRect(
&rect);
rect.OffsetRect(
1,0);
this->RecalcLayout();
m_ProperBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(
&m_ProperBar,AFX_IDW_DOCKBAR_TOP,&rect);

//创建缩放工具栏
//m_TestBar.SetBorders(1,1,1,1);
if(!m_ZoomBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP|
CBRS_FLOAT_MULTI
|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)||
!m_ZoomBar.LoadToolBar(IDR_TOOLBAR_ZOOM))
...{
TRACE0(
"未能创建缩放工具栏 ");
return-2;//未能创建
}

m_ZoomBar.LoadTrueColorToolBar(
16,IDB_BITMAP_ZOOM,IDB_BITMAP_ZOOM_HOT,IDB_BITMAP_ZOOM_DISABLED);
m_ZoomBar.GetWindowRect(
&rect);
rect.OffsetRect(
2,0);
this->RecalcLayout();
m_ZoomBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(
&m_ZoomBar,AFX_IDW_DOCKBAR_TOP,&rect);

//创建测试工具栏
//m_TestBar.SetBorders(1,1,1,1);
if(!m_TestBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP|
CBRS_FLOAT_MULTI
|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)||
!m_TestBar.LoadToolBar(IDR_TOOLBAR_TEST))
...{
TRACE0(
"未能创建测试工具栏 ");
return-2;//未能创建
}

m_TestBar.LoadTrueColorToolBar(
16,IDB_BITMAP_TEST,IDB_BITMAP_TEST_HOT,IDB_BITMAP_TEST_DISABLED);
m_TestBar.GetWindowRect(
&rect);
rect.OffsetRect(
1,0);
this->RecalcLayout();
m_TestBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(
&m_TestBar,AFX_IDW_DOCKBAR_TOP,&rect);

m_toolTip.Create(
this);
//Addstooltipfortoolbar
m_toolTip.AddToolBar(&m_ProperBar);

return0;
}

但是这样做有一个问题,就是两个工具条之间有空白间隙,显得很难看,如下图所示。已经在论坛里发帖了,希望有高手指点一二。

高手给出的答案为:

这种效果是正常的,如果不想要这样,可以把CBRS_GRIPPER风格去掉,或者用CReBar。

一次提供2个软件均已破解,可直接注册使用。 这两个软件各有特色,本人均使用过。特别说明的是,VisulToolBar1.5由于网上该版本大多不能使用,这是我花费了大量时间才找到的可用版本,共享出来方便下载。 工具简介: 对程序员来说,可能经常要设计工具栏(Toolbar)以及修改工具栏中的某个图标。有时需要将各种小图标合并起来,以用于图像列表(Image List)。最常见的是在工具栏去掉一个图标或加入一个已有图标。但Visual C++的工具栏编辑器很难满足我们的要求。从而设计一个漂亮的真彩色工具栏变成了一件很麻烦的事情。 您或许有过这样的经历,为了设计一个漂亮的工具条,你要先找着或者自己做出每个小图标, ,最后为了把这些四处搜刮的小图片,凑成一副完整的工具条位图资源,您带上您的老花镜, 小心谨慎地对齐一个个图片,累的是腰酸背痛腿抽筋,可是往往效果都不理想。最要命的是,下次你想再中间插入一个按钮,上面的过程,您又得重新来过。有时候,您要花几个小时的时间,来生成真彩色工具条的位图资源!现在好了,工具栏生成器(Toolbar Creator)可以自动读入小位图文件(支持16×16,24×24,32×32,48×48以及任意自定义的尺寸),自动合并所有小的位图,然后输出您整合以后的位图资源文件。此外,工具栏生成器(Toolbar Creator) 允许用户动态调整按钮图标的顺序!合并以后的位图,再次读入的时候,可以自动重新分割成各个合并前的小图标,方便您插入新的按钮图标!支持剪贴板操作,可以通过剪贴板输入小按钮的位图。工具栏生成器(Toolbar Creator)可以自动生成禁止按钮的灰度图像,所有操作,瞬间完成!工具栏生成器(Toolbar Creator)尤其适合Visual C++ 程序开发人员,可以自动生成真彩色的位图资源,让您的程序更专业。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值