有一个从 CListCtrl 继承的 CxxxListCtrl的类
需要从 文件中动态加载 位图到 ImageList 里,并且可以作为 InsertItem的图标
但是加载以后,InsertItem出来的是 全黑色的一个图标,找不到问题在哪里,代码如下,请教各位高手指教,是有什么问题还是做法不对?int CxxxListCtrl::AddImage(CString &sImage,int cx,int cy)
{
    CBitmap bmpSrc,bmpDest;
    HBITMAP hBitmap = (HBITMAP)::LoadImage(0,sImage,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
    if(hBitmap == NULL)
        return;
    bmpSrc.Attach(hBitmap);
    BITMAP bm;
    bmpSrc.GetBitmap(&bm);
    CClientDC cdcSrc(this),cdcDest(this);
    bmpDest.CreateCompatibleBitmap(&cdcDest,cx,cy);    CBitmap *pOldSrc = cdcSrc.SelectObject(&bmpSrc);
    CBitmap *pOldDest = cdcDest.SelectObject(&bmpDest);    cdcDest.StretchBlt(0,0,cx,cy,&cdcSrc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
    
    cdcSrc.SelectObject(pOldSrc);
    cdcDest.SelectObject(pOldDest);
    CImageList *pImageList = GetImageList(LVSIL_NORMAL);
    int iIndex = pImageList->Add(&bmpDest,RGB(255,0,255));
    return iIndex;
}

解决方案 »

  1.   

    pImageList->Add(&bmpDest,RGB(255,0,255));
                             ~~~~~~~~~~~~~~~这里要取背景色
      

  2.   

    MSDN int Add( CBitmap* pbmImage, COLORREF crMask );crMaskColor used to generate the mask. Each pixel of this color in the given bitmap is changed to black and the corresponding bit in the mask is set to one.
    后面的是 Mask Color 设成什么都是可以的,为什么要设成背景色?
    我指定了 紫色 是透明的,这样写应该是对的。
      

  3.   

    剪一段我的代码给你看看
    _tree_image_bmp.LoadBitmap(IDB_IMAGE_LIST);
    _tree_image_list.Create(16, 16, ILC_COLORDDB|ILC_MASK, 10, 0);
    _tree_image_list.Add(&_tree_image_bmp, RGB(255, 0, 255));