您的位置:首页 > 编程语言 > C语言/C++

C++如何加载PNG透明图片作为菜单项的图标

2015-08-25 10:18 513 查看
HBITMAP LoadImageFromResource(UINT nResourceId, LPCTSTR pszResourceName/* = "PNG"*/)
{
HBITMAP hBitmap = NULL;
HINSTANCE hInstance = AfxGetResourceHandle();
HRSRC hRsrc = ::FindResource (hInstance, MAKEINTRESOURCE(nResourceId), pszResourceName); // type
if ( hRsrc==NULL ){
return hBitmap;
}

// load resource into memory
DWORD len = SizeofResource(hInstance, hRsrc);
BYTE* lpRsrc = (BYTE*)LoadResource(hInstance, hRsrc);
if ( lpRsrc==NULL ){
return hBitmap;
}

// 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
CImage image;
image.Load(pstm);
hBitmap = image.Detach();
// free/release stuff
GlobalUnlock(m_hMem);
pstm->Release();
FreeResource(lpRsrc);

return hBitmap;
}

HBITMAP hBmpPreview = NULL;
hBmpPreview = LoadImageFromResource(IDR_PNG_PICTURE);
::SetMenuItemBitmaps(psub->m_hMenu, ID_MENU_PREVIEW_IMAGE, MF_BYCOMMAND, hBmpPreview, hBmpPreview);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: