环境:VS2008 MFC
问题:如下函数是加载资源图片到Cbitmap中void CMyColorItem::AddResourceBitmap(CBitmap* bmp, UINT32 bmpId)
{
if (bmp != NULL && bmp->m_hObject != NULL)
{
bmp->DeleteObject();
}
bmp = new CBitmap();
HBITMAP hbit = LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(bmpId));
bmp->Attach(hbit);
}
调用如下:
AddResourceBitmap(m_hBitmap[0], hbit);在AddResourceBitmap函数结束时,单步运行发现图片已经加载进去了,bmp->m_hObject=0x0b0539f2。但为什么在调用后m_hBitmap[0]->m_hObject还是为NULL?该如何修改呢?在线等,O(∩_∩)O谢谢

解决方案 »

  1.   

    bmp = new CBitmap();删掉
      

  2.   

    关键是一个Cbitmap可能会多次设置AddResourceBitmap啊,Attach只能一次吧
      

  3.   

    函数参数问题
    void CMyColorItem::AddResourceBitmap(CBitmap** bmp, UINT32 bmpId)
    {
        if (*bmp != NULL && (*bmp)->m_hObject != NULL)
        {
            (*bmp)->DeleteObject();
        }
        *bmp = new CBitmap();
        HBITMAP hbit = LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(bmpId));
        (*bmp)->Attach(hbit);
    }
      

  4.   

    如果不DeleteObject就发现内存不断增加,运行1段时间后就出现“内存不足了”
      

  5.   

    用参数CBitmap* bmp的话,new得到的对象根本传不回去
      

  6.   

    我以前也出现过这个问题, 不知道怎么回事, 但如下 写后 就OK了, 楼主可以借鉴下: CBitmap bitmap;
    if (bitmap.LoadBitmap(IDB_BITMAP_FIND))
    {
    m_wndBtnSearch.SetBitmap(bitmap);
    bitmap.Detach();
    }
      

  7.   

    void CMyColorItem::AddResourceBitmap(CBitmap** bmp, UINT32 bmpId)
    {
      if (*bmp != NULL && (*bmp)->m_hObject != NULL)
      {
      (*bmp)->DeleteObject();
      delete (*bmp);//////////////
      }
      *bmp = new CBitmap();
      HBITMAP hbit = LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(bmpId));
      (*bmp)->Attach(hbit);
    }
      

  8.   

    很奇怪啊,内存一直在增加(哪怕打开文件对话框也增加4000K左右,不释放)。但只要最小化、再最大化且以下,内存一下子就下降了这是怎么回事?是不是在最小化时才释放内存啊、、、???显示界面时,内存不断增加,12333K
    最小化,内存急速下降,2043K
    再最大化,内存小段增加,4322K