首先利用 Visual Toolbar工具 将自.bmp图片制作成工具条。 Visual Toolbar工具 可以利用Google去搜,尽管这款软件需要注册,但笔者不提倡下载注册机破解注册或者直接下载破解版。
然后在VC的资源中添加工具栏,导入已经制作好的工具条(此时为bmp格式),然后利用CtrueColorToolBar 类加载图片到工具条。CtrueColorToolBar 类的下载地址为: http://www.codeproject.com/docking/TrueColorToolBar.asp
以上两步可以参考《 一步步制作真彩工具条 》。
接下来就要将多个工具条加载到同一个工具栏里。我也是在网上找到的源代码,然后自己修改。不便赘述,直接贴上代码:
int
CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
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);
CRect rect;
//
创建属性工具栏
//
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
);
//
Adds tooltip for toolbar
m_toolTip.AddToolBar(
&
m_ProperBar);
return
0
;
}
但是这样做有一个问题,就是两个工具条之间有空白间隙,显得很难看,如下图所示。已经在论坛里发帖了,希望有高手指点一二。
高手给出的答案为:
这种效果是正常的,如果不想要这样,可以把CBRS_GRIPPER风格去掉,或者用CReBar。