As Title,现在有多个ToolBar,默认状态下每个ToolBar都自成一排。
现在希望把其中几个ToolBar排成一排,这个怎么弄,请教大虾。 
    :)___________________

解决方案 »

  1.   

    ------------------------|   
      |     bar1|   bar2   |   bar3         |   
      ------------------------| 
    先建立一个ReBar.先后将bar1,   bar2,   bar2加进行去。   
      CReBar   m_Rebar;   
      m_Rebar.Create(...);   
      m_Rebar.AddBar(&bar1);   
      m_Rebar.AddBar(&bar2);
      

  2.   

    void CMainFrame::DockControlBarLeftOf(CToolBar* Bar,CToolBar* LeftOf)
    {
    CRect rect;
    DWORD dw;
    UINT n; // get MFC to adjust the dimensions of all docked ToolBars
    // so that GetWindowRect will be accurate
    RecalcLayout();
    LeftOf->GetWindowRect(&rect);
    rect.OffsetRect(1,0);
    dw=LeftOf->GetBarStyle();
    n = 0;
    n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n;
    n = (dw&CBRS_ALIGN_BOTTOM && n==0) ? AFX_IDW_DOCKBAR_BOTTOM : n;
    n = (dw&CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT : n;
    n = (dw&CBRS_ALIGN_RIGHT && n==0) ? AFX_IDW_DOCKBAR_RIGHT : n; // When we take the default parameters on rect, DockControlBar will dock
    // each Toolbar on a seperate line.  By calculating a rectangle, we in effect
    // are simulating a Toolbar being dragged to that location and docked.
    DockControlBar(Bar,n,&rect);
    }在mainframe中:
    DockControlBar(&m_wndMainBar,AFX_IDW_DOCKBAR_TOP);
    DockControlBarLeftOf(&m_wndEditBar,&m_wndMainBar);
    这个是msdn中的例子代码 去搜docktool 这个例子里面演示toolbar很详细
      

  3.   

    http://www.codeproject.com/docking/toolbar_docking.aspAdd the following method to your CMainFrame class: void CMainFrame::DockControlBarLeftOf(CToolBar* Bar, CToolBar* LeftOf)
    {
    CRect rect;
    DWORD dw;
    UINT n;

    // get MFC to adjust the dimensions of all docked ToolBars
    // so that GetWindowRect will be accurate
    RecalcLayout(TRUE);

    LeftOf->GetWindowRect(&rect);
    rect.OffsetRect(1,0);
    dw=LeftOf->GetBarStyle();
    n = 0;
    n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n;
    n = (dw&CBRS_ALIGN_BOTTOM && n==0) ? AFX_IDW_DOCKBAR_BOTTOM : n;
    n = (dw&CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT : n;
    n = (dw&CBRS_ALIGN_RIGHT && n==0) ? AFX_IDW_DOCKBAR_RIGHT : n;

    // When we take the default parameters on rect, DockControlBar will dock
    // each Toolbar on a seperate line. By calculating a rectangle, we
    // are simulating a Toolbar being dragged to that location and docked.
    DockControlBar(Bar,n,&rect);
    }Now, in your CMainFrame::OnCreate, instead of using DockControlBar, use DockControlBarLeftOf: m_wndToolBar1.EnableDocking(CBRS_ALIGN_ANY);
    m_wndToolBar2.EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar1);
    DockControlBarLeftOf(&m_wndToolBar2,&m_wndToolBar1);
      

  4.   

    http://topic.csdn.net/t/20030523/10/1822760.html
      

  5.   

    void CMainFrame::DockControlBarLeftOf(CToolBar* Bar, CToolBar* LeftOf)
    {
    CRect rect;
    DWORD dw;
    UINT n;

    // get MFC to adjust the dimensions of all docked ToolBars
    // so that GetWindowRect will be accurate
    RecalcLayout(TRUE);

    LeftOf->GetWindowRect(&rect);
    rect.OffsetRect(1,0);
    dw=LeftOf->GetBarStyle();
    n = 0;
    n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n;
    n = (dw&CBRS_ALIGN_BOTTOM && n==0) ? AFX_IDW_DOCKBAR_BOTTOM : n;
    n = (dw&CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT : n;
    n = (dw&CBRS_ALIGN_RIGHT && n==0) ? AFX_IDW_DOCKBAR_RIGHT : n;

    // When we take the default parameters on rect, DockControlBar will dock
    // each Toolbar on a seperate line. By calculating a rectangle, we
    // are simulating a Toolbar being dragged to that location and docked.
    DockControlBar(Bar,n,&rect);
    }Now, in your CMainFrame::OnCreate, instead of using DockControlBar, use DockControlBarLeftOf: m_wndToolBar1.EnableDocking(CBRS_ALIGN_ANY);
    m_wndToolBar2.EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar1);
    DockControlBarLeftOf(&m_wndToolBar2,&m_wndToolBar1);
      

  6.   

    在线等候~~~多个ToolBar如何自动排成一排 
    ==================================================================
    答案都给出来了,都是正确的,楼主别忘了结了,友情提示!!!MainFrm.h头文件中
    定义
        void DockControlBarLeftOf(CToolBar* Bar, CToolBar* LeftOf);//工具条停靠函数
        CToolBar    m_wndToolBar;
        CToolBar    m_wndToolBar1;MainFrm. cpp文件中
    void CMainFrame::DockControlBarLeftOf(CToolBar* Bar, CToolBar* LeftOf)
    {
    CRect rect;
    DWORD dw;
    UINT n;

    // get MFC to adjust the dimensions of all docked ToolBars
    // so that GetWindowRect will be accurate
    RecalcLayout(TRUE);

    LeftOf->GetWindowRect(&rect);
    rect.OffsetRect(1,0);
    dw=LeftOf->GetBarStyle();
    n = 0;
    n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n;
    n = (dw&CBRS_ALIGN_BOTTOM && n==0) ? AFX_IDW_DOCKBAR_BOTTOM : n;
    n = (dw&CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT : n;
    n = (dw&CBRS_ALIGN_RIGHT && n==0) ? AFX_IDW_DOCKBAR_RIGHT : n;

    // When we take the default parameters on rect, DockControlBar will dock
    // each Toolbar on a seperate line. By calculating a rectangle, we
    // are simulating a Toolbar being dragged to that location and docked.
    DockControlBar(Bar,n,&rect);
    }
    在CMainFrame::OnCreate函数中
         创建两个工具条
            if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
    | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
    !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
    {
    TRACE0("Failed to create toolbar\n");
    return -1;      // fail to create
    } if (!m_wndToolBar1.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
    | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
    !m_wndToolBar1.LoadToolBar(IDR_TOOLBAR1))
    {
    TRACE0("Failed to create toolbar\n");
    return -1;      // fail to create
    }
         然后加上以下代码:
            m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
            m_wndToolBar1.EnableDocking(CBRS_ALIGN_ANY);
            EnableDocking(CBRS_ALIGN_ANY);
            DockControlBar(&m_wndToolBar);
            DockControlBarLeftOf(&m_wndToolBar1,&m_wndToolBar);
      

  7.   

    To all,
       非常感谢楼上的各位给出的帮助,目前按照 wangzhenglan() 和 laiyiling(陌生人) 兄的方案已经成功解决多个工具条摆成一排的问题。   不过随之而来的还有一个小问题,就是:当我关闭一排中某个ToolBar的时候,ToolBar的父窗口(ReBar)没有刷新,就会出现删除了最前面的一个ToolBar,后面的ToolBar不会重新排列。不知道这个怎么弄。
      

  8.   

    重载关闭ToolBar函数,DockControlBar和DockControlBarLeftOf重新排列