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);
相关文章推荐
- 编程算法 - 阅读完整的文件(C++)
- strcpy没有声明 c++头文件详解
- 从编译器角度分析C语言中数组名和指针的区别
- [leetcode-223]Rectangle Area(c++)
- c语言实现函数给主函数中的指针赋值的方法
- 5.7 C和C++的关系
- C++多态基础
- C与C++中结构体的区别
- C++中的四种类型转换
- [leetcode-225]Implement Stack using Queues(c++)
- C++中函数指针的使用
- C/C++:内存字节对齐详解
- 关于C语言头文件保护的一些认识
- c++经典好书
- C++基础细节(一)
- C++名字空间
- VC++编译链接原理与过程
- C++中的常量定义小结
- c++ 头文件中定义函数的优缺点
- 快速排序