如何在对话框中加入两个水平排放的工具条?
我虽然成功创建了两个工具条,但始终只能显示第一个。
在我的代码中调用了RepositionBars函数,从返回的结果来看,这两个工具条是垂直排放的,但无论如何也没有办法把他们水平排放。
如何解决!!!

解决方案 »

  1.   

    在对话框类中声明两个
    CToolBar ToolBar1;
    CToolBar ToolBar2;
    然后Create出来
    直接用MoveWindow()函数 把两个工具条显示出来 就可以了
      

  2.   

    用GetWindowRect得到第一个bar的矩形,用OffSetRect向右下角稍偏移一点,然后用这个矩形调用CFrameWnd::DockControlBar,把弟二个bar移到这个矩形的位置。
      

  3.   

    vckbase中类vc风格界面的例子好像就是用两个工具挑来做的,不妨看看
      

  4.   

    我帮你找了一个,你自己看看吧
    m_wndColorBar是CMainFrame类的一个CToolBar的Protected变量。int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
    return -1;

    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
    } //swh
    int iTBCtlID;
    int i;
    if(!m_wndColorBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)
    ||!m_wndColorBar.LoadToolBar(IDR_TOOLBAR1))
    {
    return -1;
    } iTBCtlID=m_wndColorBar.CommandToIndex(ID_COLOR_BLACK);
    if(iTBCtlID>=0)
    {
    for(i=iTBCtlID;i<(iTBCtlID+4);i++)
    m_wndColorBar.SetButtonStyle(i,TBBS_CHECKGROUP);
    } //swh if (!m_wndStatusBar.Create(this) ||
    !m_wndStatusBar.SetIndicators(indicators,
      sizeof(indicators)/sizeof(UINT)))
    {
    TRACE0("Failed to create status bar\n");
    return -1;      // fail to create
    } // TODO: Delete these three lines if you don't want the toolbar to
    //  be dockable
    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar); return 0;
    }
      

  5.   

    你首先在CMainFrame::OnCreate()中创建两个工具条,
    然后进行停靠控制:
    EnableDocking(CBRS_ALIGN_ANY);
    m_wndToolBar1.EnableDocking(CBRS_ALIGN_TOP);
    DockControlBar(&m_wndToolBar);
    EkDockBarNextTo(&m_wndToolBar2,&m_wndToolBar1);//函数定义如下
    void CMainFrame::EkDockBarNextTo( CControlBar* pNewBar,
                          CControlBar* pDockedBar,
                          UINT nDockBarID=AFX_IDW_DOCKBAR_TOP )
    {
       ASSERT_VALID( pDockedBar );
       ASSERT_VALID( pNewBar );   // 1 - 找到要停靠的框架窗口
       CFrameWnd* pFrame = pDockedBar->GetDockingFrame();   // 2 - 强制 MFC计算停靠工具栏的位置
       pFrame->RecalcLayout();   // 3 - 计算已经停靠控制栏的矩形面积
       CRect rect;
       pDockedBar->GetWindowRect( &rect );//屏幕坐标:134,311,284,668   // 4 -将矩形面积沿x,y轴偏移一个单位,这样新的控制栏可以停靠
       //在已有控制栏的右边和底部
       rect.OffsetRect(-1,-1);   // 5 - 停靠新的工具栏
       pFrame->DockControlBar( pNewBar, nDockBarID, &rect );
    }