今天读取资源的时候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;
}