【问题标题】:Fetching CBitmap out of CImageList从 CImageList 中获取 CBitmap
【发布时间】:2011-09-20 16:59:35
【问题描述】:

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

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

但是我得到的只是黑屏。谁能指出我哪里出错了?

【问题讨论】:

    标签: mfc visual-c++


    【解决方案1】:

    好的,您的代码中有许多错误

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

    考虑到所有这些,您的代码应该如下所示:

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

    【讨论】:

    • 非常真实。但是,我相信您仍然需要获取位图的正确部分,如上面我的 cmets 所示。
    猜你喜欢
    • 2018-11-02
    • 1970-01-01
    • 2015-05-21
    • 2014-04-11
    • 1970-01-01
    • 2012-03-07
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多