在资源中保存了GIF,PNG,ANI等等资源时怎样加载呢?
可以使用如下方法
加载动态图标(光标)的方法
注意再将光标导入到资源时候资源类型输入ANI
// 在一般mfc程序中使用
//HINSTANCE hInstance = AfxGetInstanceHandle();
// 如果是atlcom组件中使用
//HINSTANCE hInstance = _AtlBaseModule.GetModuleInstance();
HCURSOR LoadAniCursor(HINSTANCE hInstance, UINT nID)
...{
HRSRC hRes = FindResource(hInstance, MAKEINTRESOURCE(nID), L"ANI");
if (hRes == NULL)
...{
ATLTRACE("cannot find resource errcode: %d", GetLastError());
return NULL;
}
DWORD dwSize = SizeofResource(hInstance, hRes);
HGLOBAL hGlob = LoadResource(hInstance, hRes);
if (hGlob == NULL)
...{
ATLTRACE("cannot Load resource errcode: %d", GetLastError());
return NULL;
}
LPBYTE pBytes = (LPBYTE)LockResource(hGlob);
HCURSOR hCursor = (HCURSOR)CreateIconFromResource(pBytes, dwSize, FALSE, 0x00030000);
if (hCursor == NULL)
...{
ATLTRACE("cannot create ani cursor errcode: %d", GetLastError());
return NULL;
}
UnlockResource(hGlob);
FreeResource(hRes);
return hCursor;
}
//成功调用
SetCursor(hAniCursor);
上面的方法在非dll(包括ATL com Dll)的普通应用程序中使用是没有问题的。在dll中使用时某些ani(可能有alpha通道32位以上)的加载可能不成功。
另外介绍一种在MFC exe程序中使用的最简单的方法在加入ani 文件到资源中时候资源类型输入21( ATL_RT_ANICURSOR的值)
加载的方法可以为:
- HCURSOR hAniCur = ::LoadCursor(AfxFindResourceHandle(ATL_MAKEINTRESOURCE(IDR_ANI1),
- ATL_RT_ANICURSOR), ATL_MAKEINTRESOURCE(IDR_ANI1));
GIF PNG 图片加载方法(使用了GDI+)
BOOL ImageFromIDResource(HINSTANCE hInstance, UINT nID, LPCTSTR sTR, Image * &pImg)
...{
HRSRC hRsrc = ::FindResource (hInstance, MAKEINTRESOURCE(nID), sTR); // type
if (!hRsrc)
return FALSE;
// load resource into memory
DWORD len = SizeofResource(hInstance, hRsrc);
BYTE* lpRsrc = (BYTE*)LoadResource(hInstance, 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;
}
本文介绍了如何在资源中加载GIF、PNG、ANI等特殊资源,提供了加载动态图标的MFC方法,特别指出在DLL中加载某些包含alpha通道的ANI可能会失败。还分享了一种简单的MFC EXE程序中加载ANI资源的方式,并提及了使用GDI+加载GIF和PNG图片的方法。

3523

被折叠的 条评论
为什么被折叠?



