19.VC(ui)-加载图片资源的方法(随手代码)

来源:互联网 发布:淘宝阿里妈妈推广 编辑:程序博客网 时间:2024/06/03 02:55
 
BOOL CImageManager::LoadResImage(UINT nResID, LPCTSTR lpType, Bitmap *&lpImage,  HINSTANCE hInstance){lpImage  = NULL;hInstance = (NULL == hInstance) ? ::AfxGetResourceHandle() : hInstance;// If bmp,use system load.if (RT_BITMAP == lpType){HBITMAP hBmp = ::LoadBitmap(hInstance, MAKEINTRESOURCE(nResID));lpImage = Bitmap::FromHBITMAP(hBmp, 0);::DeleteObject(hBmp);if (!lpImage){TRACE("lpImage is NULL\n");return FALSE;}else{if (Gdiplus::Ok != lpImage->GetLastStatus()){TRACE("lpImage is error\n");return FALSE;}else{return TRUE;}}}// User-DefinedHRSRC hRsrc = ::FindResource(hInstance, MAKEINTRESOURCE(nResID), lpType);if (!hRsrc){TRACE("hRscs is NULL\n");return FALSE;}// Load resource into memory ---------------------------------DWORD len = ::SizeofResource(hInstance, hRsrc);BYTE *lpRsrc = (BYTE*)::LoadResource(hInstance, hRsrc);if (!lpRsrc){TRACE("lpRsrc is NULL\n");return FALSE;}// Allocate global memory on which to create stream ----------HGLOBAL hMem = ::GlobalAlloc(GMEM_FIXED, len);BYTE *pMem = (BYTE*)::GlobalLock(hMem);memcpy(pMem, lpRsrc, len);IStream *pStream = NULL;// You can query MSDN,why I use TRUE, -- hgy notes.HRESULT ht = ::CreateStreamOnHGlobal(hMem, TRUE, &pStream);if (S_OK != ht){TRACE("ht is error\n");return FALSE;}// Load from stream -------------------------------------------lpImage = Gdiplus::Bitmap::FromStream(pStream);// free/release stuff -----------------------------------------::GlobalUnlock(hMem);pStream->Release();::FreeResource(lpRsrc);if (!lpImage){TRACE("lpImage is NULL\n");return FALSE;}else{if (Gdiplus::Ok != lpImage->GetLastStatus()){TRACE("lpImage is error\n");return FALSE;}else{return TRUE;}}}