Bitmap::FromResource 读取资源ID失败

来源:互联网 发布:数据库特点 编辑:程序博客网 时间:2024/05/29 02:39

今天读取资源的时候Bitmap* pBitmap = Bitmap::FromResource(AfxGetResourceHandle(), MAKEINTRESOURCE(nId));  pBitmap == NULL;总是读取失败,

这里的资源是图片资源,我自定义的"IMAGE"

后来差了资料是,应该是

BOOL CXXXApp::InitInstance()

{

    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

}

int CXXXApp::ExitInstance()
{
  GdiplusShutdown(gdiplusToken);

  return COleControlModule::ExitInstance();
}

 

上面虽然能读取,但是图像显示不出来;最后改用下面

typedef std::map<UINT, Bitmap*> BitmapMap; 

BitmapMap   m_Map;

void AddItem(UINT nId)
{
 //Bitmap* pBitmap;
 //ImageFromIDResource(nId, _T("IMAGE"), pBitmap);

 //Bitmap* pBitmap = Bitmap::FromResource(AfxGetResourceHandle(), MAKEINTRESOURCE(nId));
 //m_Map[nId] = pBitmap;

 Bitmap* pBitmap;
 ImageFromIDResource(nId, _T("IMAGE"), pBitmap);
 m_Map[nId] = pBitmap;
}

 


BOOL ImageFromIDResource(UINT nID, LPCTSTR szType, Bitmap* &pImg)
{
 HINSTANCE hInst = AfxGetResourceHandle();
 HRSRC hRsrc = ::FindResource(hInst, MAKEINTRESOURCE(nID), szType);
 if (!hRsrc) return FALSE;
 // load resource into memory
 DWORD len = SizeofResource(hInst, hRsrc);
 BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);
 if (!lpRsrc)
 return FALSE;
 // Allocate global memory on which to create stream
 HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);
 BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
 memcpy(pmem,lpRsrc,len);
 IStream* pstm;
 CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);
 // load from stream
 pImg = Bitmap::FromStream(pstm);
 // free/release stuff
 GlobalUnlock(m_hMem);
 pstm->Release();
 FreeResource(lpRsrc);
 return TRUE;
}