CBitmap mm;
CImageList img;方式一: img.Create(IDB_BITMAP1, 16, 0, RGB(192, 192, 192));方式二: mm.LoadBitmap(IDB_BITMAP1);
img.Create(16,16, ILC_COLOR8, 8, 8);
img.Add(&mm,RGB(192,192,192));  ---------**由于第一种方式不能载入高彩色的ImageList,但是第二种方法载入的ImageList总是有个黑色背景(由于**造成的,将RGB(192,192,192)全部换成了黑色),第一种办法没有黑色背景(因为它将RGB(192,192,192)全部换成了透明色。
为什么这两种方式效果不同?有没有解决的办法?即又可以载入高彩,又不会去不掉背景色?

解决方案 »

  1.   

    方法二的步骤完成后加入SetBkColor(CLR_NONE);试试看
      

  2.   


    img.Create(16,16, ILC_COLOR8, 1, 1);
    HICON hIcon1 = AfxGetApp()->LoadIcon(IDI_ICON1);
    HICON hIcon2 = AfxGetApp()->LoadIcon(IDI_ICON2); img.Add(hIcon1);
    img.Add(hIcon2);

    this->GetTreeCtrl ().SetImageList(&img,TVSIL_NORMAL);
    this->GetTreeCtrl ().SetImageList(&img,TVSIL_STATE);
    this->GetTreeCtrl ().InsertItem("abcd", 0, 0);
    this->GetTreeCtrl ().InsertItem("1234", 1, 1);here IDI_ICON1 , IDI_ICON2 is 48 * 48 * 256color icon.
      

  3.   

    img.Create(16,16, ILC_COLOR8, 1, 1);
    HICON hIcon1 = AfxGetApp()->LoadIcon(IDI_ICON1);
    HICON hIcon2 = AfxGetApp()->LoadIcon(IDI_ICON2); img.Add(hIcon1);
    img.Add(hIcon2);

    this->GetTreeCtrl ().SetImageList(&img,TVSIL_NORMAL);
    this->GetTreeCtrl ().SetImageList(&img,TVSIL_STATE);
    this->GetTreeCtrl ().InsertItem("abcd", 0, 0);
    this->GetTreeCtrl ().InsertItem("1234", 1, 1);
      

  4.   

    snlux的办法不行。
    zdhe你的办法必须让我把BITMAP变成很多个ICON,每个LOAD。一来太烦、二来代码不够精炼,应该有办法可以两全的吧?
      

  5.   

    OK, 搞定了,原来没这样用过,以为很简单的:)让各位同仁见笑了。好,代码如下:CImageList img;
    HIMAGELIST hImage = ImageList_LoadImage(AfxGetInstanceHandle(),
    MAKEINTRESOURCE(IDB_BITMAP), 16, 1, RGB(R, G, B), IMAGE_BITMAP, 0);
    img.Attach(hImage);完工了,祝好运。
      

  6.   

    Snlux, Thanks. 我没好好看MSDN,没看到这个ImageList_LoadImage函数。但是你仍然有个问题,按照你以上的代码,img还不是高彩,但如果把ImageList_LoadImage的最後一个参数加上LR_CREATEDIBSECTION属性img就是高彩了。分归你了。但是不知道可不可以留下你的EMail或QQ号,以后经常讨教,还望你别嫌烦。
    [email protected]