先上图:
代码比较多,分文件列出(这里使用的是VC++2005,vc6.0也可以自绘,不过贴png,jpg之类的图形比较麻烦些,故没有使用了)
先上几个头文件代码:
CImageFromResuorec.h
//////////////////////////////////////////////////////////////////////////
/// 从资源文件中加载图片
/// @param [in] pImage 图片指针
/// @param [in] nResID 资源号
/// @param [in] lpTyp 资源类型
//////////////////////////////////////////////////////////////////////////
#ifndef CIMAGEFROMRESOURCE_H_
#define CIMAGEFROMRESOURCE_H_ //防止头文件重复包含(开始)
#include <atlimage.h> static bool LoadImageFromResource
( IN CImage* pImage,
IN UINT nResID,
IN LPCSTR lpTyp
)
{
if ( pImage == NULL) return false; pImage->Destroy(); // 查找资源
HRSRC hRsrc = ::FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(nResID), lpTyp);
if (hRsrc == NULL) return false; // 加载资源
HGLOBAL hImgData = ::LoadResource(AfxGetResourceHandle(), hRsrc);
if (hImgData == NULL)
{
::FreeResource(hImgData);
return false;
} // 锁定内存中的指定资源
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); return true;
} #endif //防止头文件重复包含(结束)
代码比较多,分文件列出(这里使用的是VC++2005,vc6.0也可以自绘,不过贴png,jpg之类的图形比较麻烦些,故没有使用了)
先上几个头文件代码:
CImageFromResuorec.h
//////////////////////////////////////////////////////////////////////////
/// 从资源文件中加载图片
/// @param [in] pImage 图片指针
/// @param [in] nResID 资源号
/// @param [in] lpTyp 资源类型
//////////////////////////////////////////////////////////////////////////
#ifndef CIMAGEFROMRESOURCE_H_
#define CIMAGEFROMRESOURCE_H_ //防止头文件重复包含(开始)
#include <atlimage.h> static bool LoadImageFromResource
( IN CImage* pImage,
IN UINT nResID,
IN LPCSTR lpTyp
)
{
if ( pImage == NULL) return false; pImage->Destroy(); // 查找资源
HRSRC hRsrc = ::FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(nResID), lpTyp);
if (hRsrc == NULL) return false; // 加载资源
HGLOBAL hImgData = ::LoadResource(AfxGetResourceHandle(), hRsrc);
if (hImgData == NULL)
{
::FreeResource(hImgData);
return false;
} // 锁定内存中的指定资源
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); return true;
} #endif //防止头文件重复包含(结束)