64,648
社区成员
发帖
与我相关
我的任务
分享
void Render(HINSTANCE hInst,int iCurTime)
{
HDC hdc=GetDC(g_hWnd);
ImageFromIDResource(hInst,IDB_PNG1,TEXT("PNG"));
g_hBgMap=g_image.Detach();
SelectObject(g_mdc,g_hBgMap);
BitBlt(hdc,0,0,362,265,g_mdc,0,0,SRCCOPY);
DeleteObject(g_hBgMap);
ReleaseDC(g_hWnd,hdc);
}
void ImageFromIDResource(HINSTANCE hInst,UINT nID,LPCTSTR lpType)
{
HRSRC hRsrc = FindResource(hInst,MAKEINTRESOURCE(nID),lpType);
if(hRsrc == NULL)
return;
DWORD dwLen = SizeofResource(hInst, hRsrc);
BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);
if (!lpRsrc)
return;
HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, dwLen);
BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
memcpy(pmem,lpRsrc,dwLen);
IStream* pstm;
CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);
g_image.Destroy();//在Load前先释放掉上一次的内存。
g_image.Load(pstm);
GlobalUnlock(m_hMem);
pstm->Release();
FreeResource(lpRsrc);
}
HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, dwLen);
BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
memcpy(pmem,lpRsrc,dwLen);
IStream* pstm;
CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);
g_image.Destroy();//在Load前先释放掉上一次的内存。
g_image.Load(pstm);
GlobalUnlock(m_hMem);
pstm->Release(); //估计这里没有释放内存
FreeResource(lpRsrc);
试试智能指针
//IStream* pstm;
CComPtr<IStream> pstm;