我按照vckbase上的例子做了两个可停靠可改变大小的bar,我想让这两个bar一上一下排列在窗口的左侧,如下+----------------------------------------+
|Title                                   |
|---------+------------------------------|
|         |                              |
|  Bar1   |                              |
|         |                              |
|---------|                              |
|         |                              |
|  Bar2   |                              |
|         |                              |
+---------+------------------------------+因此两个bar分别设置了CBRS_ALIGN_LEFT|CBRS_ALIGN_TOP和CBRS_ALIGN_LEFT|CBRS_ALIGN_BOTTOM属性,但排列的结果却是如下:+----------------------------------------+
|Title                                   |
|---------+---------+--------------------|
|         |         |                    |
|  Bar1   |  Bar2   |                    |
|         |         |                    |
|         |         |                    |
|         |         |                    |
|         |         |                    |
|         |         |                    |
+---------+---------+--------------------+那我应该如何正确设置bar style和windows style才能满足我的要求呢?

解决方案 »

  1.   

    现在两个bar设置的属性相同:
    m_wndMyBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC然后用下面的语句设置停靠:
    m_wndMyBar.EnableDocking(CBRS_ALIGN_LEFT);
    DockControlBar(&m_wndMyBar,AFX_IDW_DOCKBAR_LEFT);两个bar都是这么设置的,如果想完成我的要求,应该如何修改相应的属性呢?
      

  2.   

    m_bar1.EnableDocking(CBRS_ALIGN_LEFT|CBRS_ALIGN_RIGHT);
    m_bar2.EnableDocking(CBRS_ALIGN_LEFT|CBRS_ALIGN_RIGHT);
      

  3.   

    都这么设肯定不行了
    改为CBRS_ALIGN_BOTTOM试试
      

  4.   

    m_bar1.EnableDocking(CBRS_ALIGN_LEFT|CBRS_ALIGN_RIGHT);
    m_bar2.EnableDocking(CBRS_ALIGN_LEFT|CBRS_ALIGN_RIGHT);
      

  5.   

    风格照你这样设置应该没问题,我的代码类似于下面这样:m_bar1.EnableDocking(CBRS_ALIGN_LEFT);
    m_bar2.EnableDocking(CBRS_ALIGN_LEFT);
    DockControlBar(&m_bar1, AFX_IDW_DOCKBAR_LEFT);
    DockControlBar(&m_bar2, AFX_IDW_DOCKBAR_LEFT);可以达到你要的效果。
      

  6.   

    依然不行呀诸位。pcman1990,你有做好的例子么?mail给我好么?我的油箱是[email protected]。大家帮忙呀 :~(
      

  7.   

    试一试这样:
    m_wndMyBar[0].EnableDocking(CBRS_ALIGN_ANY);
    m_wndMyBar[1].EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndMyBar[0], AFX_IDW_DOCKBAR_RIGHT);// dock mybar2 on the same row with mybar1
    RecalcLayout();
    CRect rBar;
    m_wndMyBar[1].GetWindowRect(rBar);
    rBar.OffsetRect(0, 1);
    DockControlBar(&m_wndMyBar[1],AFX_IDW_DOCKBAR_RIGHT,rBar);
      

  8.   

    依然不行呀诸位。pcman1990,你有做好的例子么?mail给我好么?我的油箱是[email protected]。大家帮忙呀 :~(
      

  9.   

    依然不行呀诸位。pcman1990,你有做好的例子么?mail给我好么?我的油箱是[email protected]。大家帮忙呀 :~(
      

  10.   

    http://www.datamekanix.com/articles/side-by-side/给我分
      

  11.   


    void g_DockControlBarOn(CFrameWnd*pFrame,CControlBar* pBarToDock,CControlBar* pBarOn,CSize sizeOffset)
    {
    CRect rect;
    DWORD dw;
    UINT n; // get MFC to adjust the dimensions of all docked ToolBars
    // so that GetWindowRect will be accurate
    pFrame->RecalcLayout();
    pBarOn->GetWindowRect(&rect);
    rect.OffsetRect(sizeOffset);
    dw=pBarOn->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.
    pFrame->DockControlBar(pBarToDock,n,&rect);}
      

  12.   

    依然不行呀诸位。
    pcman1990,你有做好的例子么?mail给我好么?我的油箱是[email protected]
    DarkNighZZY,你的代码也不好用:(大家帮忙呀 :~(
      

  13.   

    依然不行呀诸位。
    pcman1990,你有做好的例子么?mail给我好么?我的油箱是[email protected]
    DarkNighZZY,你的代码也不好用:(大家帮忙呀 :~(