我知道通过拖动可以使工具栏成为两列,但怎么在程序里面控制,使它一开始就显示为两列?

解决方案 »

  1.   

    如何将两个ControlBar停靠在同一行中 DockControlBar(&m_wndMyBar1, AFX_IDW_DOCKBAR_BOTTOM);///停靠在底部
    RecalcLayout();
    CRect rect;
    m_wndMyBar1.GetWindowRect(rect);
    rect.OffsetRect(1, 0);//偏移一个位置
    DockControlBar(&m_wndMyBar2, AFX_IDW_DOCKBAR_BOTTOM,rect);///也停靠在底部
    如何将两个ControlBar停靠在同一列中 DockControlBar(&m_wndMyBar1, AFX_IDW_DOCKBAR_RIGHT);///停靠在右边
    RecalcLayout();
    CRect rect;
    m_wndMyBar1.GetWindowRect(rect);
    rect.OffsetRect(0, 1);//看到这里的区别了吗
    DockControlBar(&m_wndMyBar2, AFX_IDW_DOCKBAR_RIGHT,rect);///也停靠在右边
      

  2.   

    我是说同一个工具栏,它的按钮显示为两列,典型的例子就是一个studio中的工具箱。
      

  3.   

    看看<<PWIN98/95下演练VC5中的COMMON一族>>或许对你有用...帮你UP...
      

  4.   

    谢谢,早就看过了,可没找到办法,我目前已经试过如下方法:(我的是浮动工具栏)
    1.用MoveWindow()改变工具栏大小,希望它能自动根据大小调整按钮为两列。
      结果:失败
      现象:边框大小没变,可是里面的按钮区域好像变了,可能是工具栏的大小变了,可是在浮动状态下,用于包含工具栏的CDockedMiniFram...的边框没变。2.既然浮动时是包含在一个自动创建的框架中的,所以用GetParent(),再MoveWindow()父窗口。
      结果:主应用程序的窗口大小变了,工具栏没变。3.在创建工具栏时指定CRect(0,0,40,300)。
      结果:工具栏高度变为300,可是宽度不受40的影响,约为200,刚好显示下一行按钮。4.对工具栏的每个按钮应用TBSTATE_WRAP风格
      结果:没影响5.期待中……^_^  用了以上方法,都没把它搞成一个工具箱一样的多列工具栏,不知道是不是我的代码的位置不对(我在CMainFram::OnCreat里加的代码),还是这些方法都不行。
      

  5.   

    在vc的sample中有这样的例子,docktool,我不知到你有没有在微软的网站上去下过vc的sample,我也是最近几天才搞懂的,强烈建议去下来看看
    我把主要的思路讲一下:
    比方说做一个两列的工具栏,
    int nCount = GetToolBarCtrl().GetButtonCount();//获得工具栏按钮的个数
    int nColumns=2;//两列
    for(int i = 0; i < nCount; i++)
    {
    UINT nStyle = GetButtonStyle(i);
    BOOL bWrap = (((i + 1) % nColumns) == 0);
    if (bWrap)
    nStyle |= TBBS_WRAPPED;
    else
    nStyle &= ~TBBS_WRAPPED; SetButtonStyle(i, nStyle);
    }基本上就可以了,不行的化就去看看原码,
      

  6.   

    void CMainFrame::SetColumns(CToolBar& tb,UINT nColumns)
    {
    int nCount = tb.GetToolBarCtrl().GetButtonCount();

    for (int i = 0; i < nCount; i++)
    {
    UINT nStyle = tb.GetButtonStyle(i);
    BOOL bWrap = (((i + 1) % nColumns) == 0);
    if (bWrap)
    nStyle |= TBBS_WRAPPED;
    else
    nStyle &= ~TBBS_WRAPPED;
    tb.SetButtonStyle(i, nStyle);
    }

    Invalidate();
    RecalcLayout();
    }
    //ok
      

  7.   

    已经找到方法了,谢谢各位的热心帮忙。不过,我发现我找到的方法比楼上的更简单,特帖出来,以求大家共同提高:
    我用的方法如下:
    CRect rcNew;m_wndMyToolBar.GetToolBarCtrl().SetRows(m_wndMyToolBar.GetCount()/2,true,&rcNew);
    m_wndMyToolBar.EnableDocking(0);
    FloatControlBar(&m_wndMyToolBar,CPoint(0,0), CBRS_ALIGN_RIGHT);SetRows()一定要在FloatControlBar前。