貌似只有CreateToolBarEx 这个API能创建一个使用内存位图的工具栏,而工具栏动态添加内存位图的方法没有。
TB_ADDBITMAP消息只能添加资源位图。
真的没有添加内存位图的方法了么?
变通一下也可以,因为我需要对资源位图进行操作之后,再添加到工具栏上。
什么方法都可以。

解决方案 »

  1.   

    nID
    If hInst is NULL, set this member to the bitmap handle of the bitmap with the button images. Otherwise, set it to the resource identifier of the bitmap with the button images. 
      

  2.   

    问题1、可使用一个图像列表装载然后再给工具栏使用就可以了,如果要处理则处理完后重新装载到图像列表中。问题2、这个更好处理了:
    第一个工具栏:     
     
    if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
      | CBRS_FLOAT_MULTI | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
      !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
     {
      TRACE0("Failed to create toolbar\n");
      return -1;      // fail to create
     }
     m_wndToolBar.SetWindowText(_T("标准工具栏")); m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
     EnableDocking(CBRS_ALIGN_ANY);
     DockControlBar(&m_wndToolBar);第二个工具栏:
     
     if (!m_wndExtendBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
      | CBRS_FLOAT_MULTI | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
      !m_wndExtendBar.LoadToolBar(IDR_EXTEND_BAR))
     {
      TRACE0(_T("Failed to create extend toolbar\n"));
      return -1;
     }
     m_wndExtendBar.SetWindowText(_T("扩展工具栏"));
     m_wndExtendBar.EnableDocking(CBRS_ALIGN_ANY);
     CRect rect;
     m_wndExtendBar.GetWindowRect(&rect);
     rect.OffsetRect(1, 0);
     this->RecalcLayout();    //关键的一步,重新排列
     DockControlBar(&m_wndExtendBar, AFX_IDW_DOCKBAR_TOP, &rect);
      

  3.   

    问题1、可使用一个图像列表装载然后再给工具栏使用就可以了,如果要处理则处理完后重新装载到图像列表中。 
    用CImageList 和CToolbarCtrl 来实现.
      

  4.   

    只看了书,没去看MSDN的TBADDBITMAP,呜呜我的分很难赚的啊。
    rect.OffsetRect(1, 0);改一下
    rect.OffsetRect(300, 25);好了,都搞定了。
      

  5.   

    现在我才是真的要哭了,还没全部验证完就给分
    谁知道工具栏怎么加载CBitmap啊? 
    this->SetBitmap(Bitmap);总是出错 
    如果: 
    Bitmap用:LoadBitmap(IDB) 那么可以成功。 
    但是如果Bitmap是一个DC选用的(也即是一个内存兼容位图),SetBitmap(Bitmap);无效。 
      

  6.   

    自问自答: 
    SetBitmap(Bitmap); 
    Bitmap 必须是被选出DC的位图才能使用。 
    当位图存在DC中时,不能做工具栏位图。