折腾了一天 IDE的资源里始终导入不了画好的外部的BMP,仅仅是24位的图而已    不知道微软为什么这么2 搞什么只支持8位色的   .
然后一堆 LoadToolBar   LoadBitMap  还设计到CImageList 之类的 疯了
想问下 
1 是不是要准备2份位图  hot 和cold的各一
2 导入不了资源怎么办
3 自己画的位图 怎么区分toolbar上每个按钮的ID?  比如 3个按钮每个是32×32的位图  总共32×96  那怎么给每个按钮分配ID?自己画的话  很好分配的

解决方案 »

  1.   

    我就是用IconWorkShop做的工具栏图标  问题是导入不了环境啊…………
      

  2.   

    你使用的什么IDE?直接修改工具栏图标名称,与程序中默认的工具栏图标同名,覆盖试试!
      

  3.   

    其实sp1带的例子有详细的代码 我就是不知道 例子里资源下的toolbar 是自己画的 还是导入的? 肯定不可能自己画嘛
      

  4.   

    1 是不是要准备2份位图 hot 和cold的各一
    2 导入不了资源怎么办
    3 自己画的位图 怎么区分toolbar上每个按钮的ID? 比如 3个按钮每个是32×32的位图 总共32×96 那怎么给每个按钮分配ID?1.hot和cold??不明白
    2.256色导入不了位图么?不能吧,实在不行用LoadImage从外部导入液可以的
    3.自己画位图的话用SetImageList,传递参数是CImageList,mfc里有一个是SetButtonInfo可以很方便的设置图片
    至于参数int iImage则是根据你CImageList载入图片的顺序了,如果是A,B,C载入,0对应A,1对应B,其它类似~
      

  5.   

    楼上,
    1 Hot和cold就是工具条在enable disable两种状态下的位图
    2 256的可以导入 不过只能是16×16的
    3 用SetImageList的话 是不是每次载入都要按32×32的载入 而不是一起32×96 的载入?
      

  6.   


    1.disable的时候没用过,巨难看默认的
    2.可以自己设置工具栏图标大小,SetSizes
    3.可以一起载入,imagelist会按照你给的大小截断载入
      

  7.   

    一起载入的的话 怎么分配这3个位图的ID呢  响应事件需要ID的呀
      

  8.   

    1、一般不用,除非你要做特别的效果
    2、加载24色的位图,可以使用手动替换,打开.rc文件,找到资源类似
    /////////////////////////////////////////////////////////////////////////////
    //
    // BMP
    //IDR_PNG_TOOLBAR         BMP                     "res\\Toolbar.bmp"将res\\Toolbar.bmp替换为24色的bmp文件,重新编译。然后使用CImageList加载它,可以指定图片的大小为32*32,CImageList会自定分割,可以根据图片的索引来使用。
    3、记得是在工具栏上添加按钮时会有个参数是按钮的ID,记不太清楚了,lz可以试一下看看有没有参数ID。
      

  9.   


    位图的id跟button的id是不同的,你查下CToolBar::SetButtons,原来也有人问,还做了个大图标的例子
      

  10.   

    谢谢楼上
    是不是这个意思
    先用ide里的新建工具栏 随便画点图案  然后进资源里 更改名字 就是我要的位图了 
      

  11.   

    我okle MainFrame的OnCreate里if (!toolBar.Create(this) ||
    !toolBar.LoadToolBar(IDR_TOOLBAR1))
    { } toolBar.SetSizes( CSize(40,40),CSize(32,32));   //设置大小
    UINT IDArray[] ={ID_FILE_NEW, ID_FILE_NEW,ID_FILE_NEW}; //按钮ID,我直接用现成的
    toolBar.SetButtons(IDArray, 3);     //三个按钮
    bmp.LoadBitmap(IDB_BITMAP1); toolBar.SetBitmap(bmp);   //设置Toolbar图片.h里加CToolBar toolBar;  CBitmap bmp;就可以了,图片ID自己搞定吧
      

  12.   

    tornado兄 你的是用CToolBar吧 
    我在试CMFCToolBar 有差别  在尝试
      

  13.   

    我是这样写的 
    if (!m_wndMyToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
    !m_wndMyToolBar.LoadToolBar(IDR_TOOLBAR1))
    {
    TRACE0("未能创建自定义工具栏\n");
    return -1;      // 未能创建
    }
    m_wndMyToolBar.CleanUpImages();
    m_MyImages.SetImageSize(CSize(32,32),FALSE);
    bool b;
    b = m_MyImages.Load(_T(".\\IDB_TOOLBAR_HOT.bmp"));

    m_wndMyToolBar.SetSizes(CSize(32,32),CSize(32,32));
    m_wndMyToolBar.SetUserImages(&m_MyImages);

    UINT IDArray[] ={ID_FILE_NEW, ID_FILE_OPEN};
    m_wndMyToolBar.SetButtons(IDArray,2);
    不过DEBUG的时候会断在
    _AFXWIN_INLINE void CDC::FillRect(LPCRECT lpRect, CBrush* pBrush)
    { ASSERT(m_hDC != NULL); ::FillRect(m_hDC, lpRect, (HBRUSH)pBrush->GetSafeHandle()); }
    这里
    不知道什么原因?
      

  14.   

    CSize(32,32),CSize(32,32)按照我的写,调试进去要大于 +7 +6,改成CSize(40,40),CSize(32,32)试试~
      

  15.   

    差别还蛮大的 用CMFCToolbar一直是断言错误 用CToolBar一直是不显示  代码跟你一样…………
      

  16.   

    哎 不管了 反正我准备用CMFCRibbonCategory这个类玩了 MS的视频里 也是用Iconworkshop替换原有BMP的        
      

  17.   

    http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/a9962311-c09d-4397-b7e9-4f8a0b337f07