在我的程序中使用了3个很短的工具条,我想将它们放在同一行上。向高手请教,先谢了!

解决方案 »

  1.   

    DockControlBarLeftOf(&m_wndtoolBar1,&m_wndToolBar2)
      

  2.   

    使工具栏一个挨着一个的停靠当你的应用程序有许多工具栏需要停靠时,重复调用CFrameWnd::DockControlBar()
    并不会达到你想要的效果,下面这个函数演示了怎样一个接一个的停靠void 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 );// 4 -将矩形面积沿x,y轴偏移一个单位,这样新的控制栏可以停靠
    在已经已有控制栏的右边和底部
    rect.OffsetRect(1,1);// 5 - 停靠新的工具栏
    pFrame->DockControlBar( pNewBar, nDockBarID, &rect );
    } 下面是这个函数的用法
    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
    return -1;// ...
    // Create toolbars and status bar
    // ...// Mainframe docking
    EnableDocking(CBRS_ALIGN_ANY);// 基本工具栏停靠在左上角
    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar( &m_wndToolBar, AFX_IDW_DOCKBAR_TOP );// Shapes 工具栏停靠在顶部,紧挨基本工具栏
    m_wndTBshapes.EnableDocking(CBRS_ALIGN_ANY);
    EkDockBarNextTo( &m_wndTBshapes, &m_wndToolBar,
    AFX_IDW_DOCKBAR_TOP );// Colors1 工具栏停在顶部,紧挨shapes工具栏
    m_wndTBcolors1.EnableDocking(CBRS_ALIGN_ANY);
    EkDockBarNextTo( &m_wndTBcolors1, &m_wndTBshapes,
    AFX_IDW_DOCKBAR_TOP );// Demo 工具栏停在左边
    m_wndTBdemo.EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar( &m_wndTBdemo, AFX_IDW_DOCKBAR_LEFT );// Colors2 工具栏停在demo右边
    m_wndTBcolors2.EnableDocking(CBRS_ALIGN_ANY);
    EkDockBarNextTo( &m_wndTBcolors2, &m_wndTBdemo,
    AFX_IDW_DOCKBAR_LEFT );return 0;