VC++ CxSkinButton加载封装在dll文件中的资源文件(图片)
一、纯资源Dll(http://www.cnblogs.com/hb_cattle/articles/1663059.html)
纯资源Dll是仅包含资源(如图标、位图、字符串和对话框等)的Dll。使用纯资源Dll是在多个程序之间共享同一组资源的好方法。这种方法也常用于解决多国语言问题。
1、
1)新建空Win32 Dll;
2)添加图片资源;
3)设置项目属性;
配置属性-链接器-高级下的 无入口点选项设为 是(/NOENTRY), 防止链接器将 _main 引用链接到 DLL 中;
(此选项是创建纯资源 DLL 所必需的)
4)最后编译项目。
(也可以使用MFC DLL项目,步骤如下:
新建一个 MFC DLL 项目,设置为 创建规则Dll ,然后打开资源视图,添加一个字符串资源和一个图片资源。然后设置项目属性,
将 配置属性-链接器-高级下的 无入口点选项设为 是(/NOENTRY) ,最后编译项目。)
2、在同一个解决方案下 添加——新建项目(exe项目)
OnInitDialog()函数中添加如下代码:
HINSTANCE hModule = LoadLibrary(L"ResourceDll.dll"); if (hModule == NULL) { MessageBox(L"加载资源文件失败!"); return true; } HBITMAP hBitmap = LoadBitmap(hModule,MAKEINTRESOURCE(2001)); if (hBitmap == NULL) { MessageBox("加载图片资源失败!"); return true; } ((CStatic*)GetDlgItem(IDC_STATIC_BITMAP))->SetBitmap(hBitmap); FreeLibrary(hModule);
IDC_STATIC_BITMAP为PictureControl
二、CxSkinButton
(CBitmap不能加载Dll文件中的图片资源???,HBITMAP)
CBitmap cBitmap; HBITMAP hBitmap;
//加载图片资源
cBitmap.LoadBitmap(IDB_BITMAP1);
hBitmap = LoadBitmap(hModule,MAKEINTRESOURCE(ID)); //相互转换 cBitmap.Attach(hBitmap); hBitmap = (HBITMAP)cBitmap.GetSafeHandle();
LoadBitmap是CBitmap的一个方法,Attach是CGdiObject的一个方法,CGdiObject是CBitmap的父类
通常如果资源并不是在该模块中,而是在资源模块中,我会使用Attach,而在本模块中,则使用LoadBitmap。
虽然也可以通过Attach来实现,但是我是这么使用的,具体其他更详细的区别,我还没有发现。希望能对你有所帮助。