1、我在框架里建立了两个CToolBar对象,他们产生后默认在窗口的上部,但是他们的排列位置是两排(如 = ),能不能让他们自动排成一排(如 - - )?
2、CToolBar里面怎么添加下拉菜单,单选复选框等?可以加哪些控件?怎么响应消息?

解决方案 »

  1.   

    在第二个toolbar 前加上
    RecalcLayout
      

  2.   

    什么意思?RecalcLayout不是CToolBar的函数阿
      

  3.   

    我试一下,另一个问题呢?你知道吗?
    还有我想让一个CDialogBar在创建以后能够浮动在窗口里,而不是靠边,怎么做?
    如果不加CBRS_RIGHT等,启动的时候要弹出警告框,怎么回事?
      

  4.   

    照你那个做了,还是不行,是不是加在两个ToolBar的Create之间?我想问题是需要设置Style,不知道该怎么设置。
      

  5.   

    之间,且要设置位置
    pFrame->RecalcLayout();
    bar->GetWindowRect(&rect);第一个bar
    rect.OffsetRect(1,1);
    pFrame->DockControlBar(pnewbar,id,&rect);//第二个bar
      

  6.   

    不好意思还有这个疑问。
    CToolBar里面怎么添加下拉菜单,单选复选框等?可以加哪些控件?怎么响应消息?
    还有我想让一个CDialogBar在创建以后能够浮动在窗口里,而不是靠边,怎么做?
    如果不加CBRS_RIGHT等,启动的时候要弹出警告框,怎么回事?
      

  7.   

    你需要的“--”功能可以通过CReBar 类实现,在MFC的SDI或MDI的第四步中
    有个Internet Explore ReBar 选项,将他选中,就可以看见程序中多了一个工具栏,这个工具栏就是你说的那中可以伸缩的那种,在程序中可以看见对应的对话框,在这个对话框中可以添加各种控件,但这个对话框的大小不能调整的,
    如果需要添加更多的控件,需要使用DialogBar
      

  8.   

    你需要悬浮的话,在DialogBar有个功能函数
    .Enabledock(CBRS_FLOAT_MULTI)
      

  9.   

    我加了.Enabledock(CBRS_FLOAT_MULTI)可是这一句出错了(出现了警告框)
      

  10.   

    甚至使用DockControlBar(&m_MyDlgBar, IDD_SHOWCTRLDLG, &rect );也要出错。到底怎么回事呢?
      

  11.   

    你把DialogBar的声明~新建整个过程的代码贴出来看看
      

  12.   


    class CMainFrame : public CFrameWnd
    {
        ...
        CDialogBar          m_wndDlgBar1;
        CDialogBar          m_wndDlgBar2;
        ...
    }int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
        ....    if( !m_wndDlgBar1.Create( this, IDD_DLGBAR1, CBRS_RIGHT|CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS | CBRS_FLYBY, IDD_DLGBAR1 ) )
        {
            TRACE0("未能创建DB1\n");
            return -1;      // fail to create
        }     //CBRS_TOOLTIPS|CBRS_FLYBY | CBRS_HIDE_INPLACE
        if( !m_wndDlgBar2.Create( this, IDD_DLGBAR2, CBRS_RIGHT|CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS | CBRS_FLYBY, IDD_DLGBAR2 ) )
        {
            TRACE0("未能创建2\n");
            return -1;      // fail to create
        }    m_wndDlgBar1.EnableDocking( CBRS_ALIGN_ANY);
        m_wndDlgBar2.EnableDocking( CBRS_ALIGN_ANY );//CBRS_FLOAT_MULTI 会出错
        EnableDocking(CBRS_ALIGN_ANY);
        DockControlBar(&m_wndDlgBar1, AFX_IDW_DOCKBAR_RIGHT);    RecalcLayout( false );
        CRect    rect;
        m_wndDlgBar1.GetWindowRect(&rect);
        rect.OffsetRect( 0, 200 );
        //DockControlBar(&m_wndDlgBar2, IDD_SHOWCTRLDLG, &rect ); // 会出错
        ...
    }
      

  13.   

    我那你的代码试验了,没有出错呀!
    不知道你的
    m_wndDlgBar1
    m_wndDlgBar2
    对应的的对话框的风格是否是Child??
      

  14.   

    我刚才又试验了下,也发生你说的问题
    我把代码做了调整就解决了:
    1)错误://自定义的工具栏
    m_wndDlgBar2.EnableDocking( CBRS_ALIGN_ANY );//CBRS_FLOAT_MULTI 会出错
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndDlgBar1, AFX_IDW_DOCKBAR_RIGHT);//系统的工具栏m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar);
    2)正确:
    //系统的工具栏m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar);
    //自定义的工具栏
    m_wndDlgBar2.EnableDocking( CBRS_ALIGN_ANY );//CBRS_FLOAT_MULTI 会出错
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndDlgBar1, AFX_IDW_DOCKBAR_RIGHT);只是顺序变化了,就没问题了
      

  15.   

    我是说设置成CBRS_FLOAT_MULTI会出错。我是按你正确的顺序作的。
    m_wndDlgBar2.EnableDocking( CBRS_FLOAT_MULTI);//这样出错
    DockControlBar(&m_wndDlgBar2, IDD_SHOWCTRLDLG, &rect ); // 这儿也会出错
      

  16.   

    EnableDocking()中是没有CBRS_FLOAT_MULTI这个参数的,
    只有
    CBRS_ALIGN_TOP   Allows docking at the top of the client area.
    CBRS_ALIGN_BOTTOM   Allows docking at the bottom of the client area.
    CBRS_ALIGN_LEFT   Allows docking on the left side of the client area.
    CBRS_ALIGN_RIGHT   Allows docking on the right side of the client area.
    CBRS_ALIGN_ANY   Allows docking on any side of the client area. 而 CBRS_FLOAT_MULTI是CControlBar::SetBarStyle中定义的参数.
    这个可以查MSDN
      

  17.   

    那为什么第二个地方会出错呢?
    我的目的是想让两个CDialogBar一出来就在同一个边,紧挨着并列,或者悬浮。我该怎么做呢?
      

  18.   

    实现工具栏象"- -"布置,用CDialogBar是无法实现的,
    只有使用CReBar
      

  19.   

    http://www.codeguru.com/Cpp/controls/toolbar/placingcontrolsintoolbars/article.php/c2547/
    这里有关于制作toolbar 的下拉菜单等的说明
      

  20.   

    我要做的就是CDialogBar的并排,实际上就是将两个CDialogBar放在同一个对话栏里,toolbar的- -已经实现了
      

  21.   

    CDialogBar的并排,就是将两个CDialogBar放在同一个对话栏里。可以在街面上移动达到,但是我希望以出来就是这个状态,该怎么设置呢?
      

  22.   

    如果是CToolBar 到有办法:
    如新建一个CToolBar 对象bar1...
    ...
    bar1.EnableDock(CBRS_ALIGN_ANY);
    ...DockControlBar(&m_wndToolBar);//这是系统的工具栏...
    CRect rect,re1;
    UINT n=0;
    RecalcLayOut();
    Bar1.GetClinetRect(&rect);
    m_wndToolBar.GetWindowRect(&re1);rect.top=re1.top;
    rect.bottom=re1.bottom;
    rect.left+=re1.right
    DockControlBar(&Bar1,n,&rect);
    你可以通过调节rect来放置在不同的地方,调节n来获得不同的停放风格
      

  23.   

    ToolBar,我可以做到,也是这么做的,可DialogBar怎么做呢?
      

  24.   

    相当于两个DialogBar在同一个对话栏上,怎么实现的?