首先利用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。