我想实现 VS2005效果的工具条管理.能够任意拖动,停靠,请问是不是有什么类呀.
那些工具条是放在Rebar中吗.
能说说设计思路吗. 

解决方案 »

  1.   

    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);
      

  3.   

    在VS2008带feature Pack的MFC应该有现成的
      

  4.   

    是用Rebar。可以在框架中定义一个CReBar对象,窗口创建后调用Create函数,然后再创建工具栏,再AddBar。
      

  5.   


    BOOL CMainFrame::CreateExToolBar()
    {
    CImageList img;
    CString str;

    if(!m_wndReBar.Create(this))
    {
    return -1;
    } if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
    | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC))
    {
    return -1;      
    } //下面的代码是设置按钮的宽度和长度
    m_wndToolBar.GetToolBarCtrl().SetButtonWidth(60, 60); //下面的代码是设置"热"的位图
    img.Create(50, 50, ILC_COLOR24|ILC_MASK,2,2);
    img.SetBkColor(::GetSysColor(COLOR_BTNFACE)); // 连接站点
    CBitmap bm1;
    bm1.LoadBitmap(IDB_BARLINKON_2);
    img.Add(&bm1, RGB(0, 0, 0)); ....................... m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img);
    img.Detach();

    //下面的代码是设置"冷"的位图
    img.Create(50, 50, ILC_COLOR24|ILC_MASK, 2, 2);
    img.SetBkColor(::GetSysColor(COLOR_BTNFACE)); // 连接站点
    CBitmap bm13;
    bm13.LoadBitmap(IDB_BARLINKON);
    img.Add(&bm13, RGB(0, 0, 0));        ....................... m_wndToolBar.GetToolBarCtrl().SetImageList(&img);
    img.Detach();

    //改变属性
    m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT |CBRS_TOOLTIPS | TBSTYLE_TRANSPARENT);
    m_wndToolBar.SetButtons(NULL, 12); // set up each toolbar button设置文字  
    m_wndToolBar.SetButtonInfo(0, ID_PATH_CONNECT, TBSTYLE_BUTTON, 0);
    m_wndToolBar.SetButtonText(0, "连接站点");

           ....................... CRect rectToolBar;
    //得到按钮的大小
    m_wndToolBar.GetItemRect(0, &rectToolBar);
    //设置按钮的大小
    m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(50,44));

    //在Rebar中加入ToolBar
    m_wndReBar.AddBar(&m_wndToolBar);

    //改变一些属性
    REBARBANDINFO rbbi;
    rbbi.cbSize = sizeof(rbbi); //这个是必须填
    rbbi.fMask = RBBIM_CHILDSIZE | RBBIM_IDEALSIZE | RBBIM_SIZE | RBBIM_BACKGROUND;
    //工具条的宽度
    rbbi.cxMinChild = rectToolBar.Width();
    //高度
    rbbi.cyMinChild = rectToolBar.Height();
    //下面这行代码是为工具条加入背景位图,请注意上rbbi.fMask中RBBIM_BACKGROUND标志
    rbbi.hbmBack = LoadBitmap(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BG_G));

    rbbi.cx = rbbi.cxIdeal = rectToolBar.Width() * 12;
    m_wndReBar.GetReBarCtrl().SetBandInfo(0, &rbbi); return TRUE;
    }