如下图,将png图添加到资源中,这样在编译程序时,编译器会自动将png图打包到生成得exe中,这样可以防止图片资源丢失或者被普通人盗用。
将资源中的png图使用GDI+绘制的代码:
BOOL CFrameView::ImageFormResource(UINT nID, LPCTSTR str, Image *& pImage)
{
HINSTANCE hIns = AfxGetResourceHandle();
HRSRC hRsrc = ::FindResource(hIns, MAKEINTRESOURCE(nID), str);
if(!hRsrc)
return FALSE;
DWORD dwLen = SizeofResource(hIns, hRsrc);
BYTE * lpRsrc = (BYTE *)LoadResource(hIns, hRsrc);
if(!lpRsrc)
return FALSE;
HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, dwLen);
BYTE * pMem = (BYTE *)GlobalLock(m_hMem);
memcpy(pMem, lpRsrc, dwLen);
GlobalUnlock(m_hMem);
IStream * pStream;
CreateStreamOnHGlobal(m_hMem, FALSE, &pStream);
pImage = Image::FromStream(pStream);//如果pImage加载成功,需要释放,不然会有内存泄漏
pStream->Release();
FreeResource(lpRsrc);
GlobalFree(m_hMem);
return TRUE;
}
使用实例代码:
void CFrameView::DrawScreenFrameBackImage(CDC * pDC, Rect rect)
{
Graphics g(pDC->GetSafeHdc());
Image * im = NULL;
ImageFormResource(IDB_FRAME, _T("PNG"), im);
if (im->GetLastStatus() == Ok)//如果im加载成功,需要释放,不然会有内存泄漏
{
g.DrawImage(im, rect);
delete im;
}
}