从CImageList中获取CBitmap

时间:2010-01-20 10:20:57

标签: mfc visual-c++

我在一个Function中的CImageList中插入了位图,并且需要稍后在另一个函数中更改一些图像。但我无法提取CBitmap。代码如下:

CBitmap GetIndividualBitmap(CImageList oImgList, int nBmpNo)
{   
    IMAGEINFO imgInfo;
    imagelist.GetImageInfo(index,imgInfo);
    CBitmap bmp;
    bmp.FromHandle(imgInfo.hbmImage);
    return bmp;
}

然而,我得到的只是黑屏。谁能指出我哪里出错?

2 个答案:

答案 0 :(得分:7)

好的,你的代码中有很多错误

1)您正在按对象传递图像列表,这意味着它将复制它。通过引用传递它是一个更好的计划 2)您没有将指向IMAGEINFO结构的指针传递给GetImageInfo 3)你误解了“FromHandle”是如何运作的。 FromHandle是一个静态函数,它返回一个指向Bitmap的指针。在您的代码中,您调用该函数,然后忽略返回的CBitmap *并返回新构造的对象的副本(即它不包含任何内容),这将导致您的黑屏。

考虑到所有这些因素,您应该拥有如下代码:

CBitmap* GetIndividualBitmap(CImageList& oImgList, int nBmpNo) 
{
    IMAGEINFO imgInfo;
    oImgList.GetImageInfo( nBmpNo, &imgInfo );
    return CBitmap::FromHandle( imgInfo.hbmImage );
}

答案 1 :(得分:0)

谷歌搜索“CImageList获取位图”产生了http://www.codeguru.com/forum/archive/index.php/t-257564.htmlhttp://www.codeproject.com/KB/graphics/getimagefromlist.aspx两者似乎正是您正在寻找的?