MFC使用自定義資源載入PNG
阿新 • • 發佈:2019-01-07
{
if ( pImage == NULL) returnfalse;
pImage->Destroy();
// 查詢資源
HRSRC hRsrc = ::FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(nResID), lpTyp);
if (hRsrc == NULL) returnfalse;
// 載入資源
HGLOBAL hImgData = ::LoadResource(AfxGetResourceHandle(), hRsrc);
if (hImgData == NULL)
{
::FreeResource(hImgData);
returnfalse;
}
// 鎖定記憶體中的指定資源
LPVOID lpVoid = ::LockResource(hImgData);
LPSTREAM pStream = NULL;
DWORD dwSize = ::SizeofResource(AfxGetResourceHandle(), hRsrc);
HGLOBAL hNew = ::GlobalAlloc(GHND, dwSize);
LPBYTE lpByte = (LPBYTE)::GlobalLock(hNew);
::memcpy(lpByte, lpVoid, dwSize);
// 解除記憶體中的指定資源
::GlobalUnlock(hNew);
// 從指定記憶體建立流物件
HRESULT ht = ::CreateStreamOnHGlobal(hNew, TRUE, &pStream);
if ( ht != S_OK )
{
GlobalFree(hNew);
}
else
{
// 載入圖片
pImage->Load(pStream);
GlobalFree(hNew);
}
// 釋放資源
::FreeResource(hImgData);
returntrue;
}
if ( pImage == NULL) returnfalse;
pImage->Destroy();
// 查詢資源
HRSRC hRsrc = ::FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(nResID), lpTyp);
if (hRsrc == NULL) returnfalse;
// 載入資源
HGLOBAL hImgData = ::LoadResource(AfxGetResourceHandle(), hRsrc);
if (hImgData == NULL)
::FreeResource(hImgData);
returnfalse;
}
// 鎖定記憶體中的指定資源
LPVOID lpVoid = ::LockResource(hImgData);
LPSTREAM pStream = NULL;
DWORD dwSize = ::SizeofResource(AfxGetResourceHandle(), hRsrc);
HGLOBAL hNew = ::GlobalAlloc(GHND, dwSize);
LPBYTE lpByte = (LPBYTE)::GlobalLock(hNew);
// 解除記憶體中的指定資源
::GlobalUnlock(hNew);
// 從指定記憶體建立流物件
HRESULT ht = ::CreateStreamOnHGlobal(hNew, TRUE, &pStream);
if ( ht != S_OK )
{
GlobalFree(hNew);
}
else
{
// 載入圖片
pImage->Load(pStream);
GlobalFree(hNew);
// 釋放資源
::FreeResource(hImgData);
returntrue;
}