BOOL ImageFromIDResource(UINT nID, LPCTSTR sTR, Image *&pImg);//通过ID添加图片资源
BOOL ImageFromIDResource(CString sFilePathName, Image *&pImg);通过文件路径名添加图片资源
在C**App.cpp中添加:
BOOL ImageFromIDResource(UINT nID, LPCTSTR sTR, Image *&pImg)
{
HINSTANCE hInst = AfxGetResourceHandle();
HRSRC hRsrc = ::FindResource (hInst,MAKEINTRESOURCE(nID),sTR); // type
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=Gdiplus::Image::FromStream(pstm);
// free/release stuff
GlobalUnlock(m_hMem);
pstm->Release();
FreeResource(lpRsrc);
return TRUE;
}
BOOL ImageFromIDResource(CString sFilePathName, Image *&pImg)
{
// load file into memory
DWORD len = 0;
HANDLE hFile;
DWORD size1,readbyte;
hFile=CreateFile(sFilePathName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL);
if(INVALID_HANDLE_VALUE == hFile)
{
return FALSE;
}
len=GetFileSize(hFile,&size1);
if(0xFFFFFFFF == len)
{
CloseHandle(hFile);
return FALSE;
}
// Allocate global memory on which to create stream
HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);
BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
ReadFile(hFile,pmem,len,&readbyte,NULL);
IStream* pstm;
CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);
// load from stream
pImg=Gdiplus::Image::FromStream(pstm);
// free/release stuff
GlobalUnlock(m_hMem);
pstm->Release();
return TRUE;
}
2.
CString strImageFile="C:\\HTGD\\SYSDATA\\MainWndBk.jpg";
PWSTR wcsImageFile = new WCHAR[MAX_PATH];
mbstowcs(wcsImageFile,strImageFile,MAX_PATH);
m_pImage=Image::FromFile(wcsImageFile);
delete [] wcsImageFile;
3.BOOL CHTGDGUIDlg::OnEraseBkgnd(CDC* pDC)
{
Gdiplus::Graphics Graphic(pDC->m_hDC);
CRect Rect;
GetWindowRect(&Rect);
// Graphic.DrawImage(m_pImage,0,0,Rect.Width(),Rect.Height());
if(Graphic.DrawImage(m_pImage,0,0) == Ok)
return TRUE;
else
return CDialog::OnEraseBkgnd(pDC);
}