VC++ CxSkinButton加载封装在dll文件中的资源文件(图片)

时间:2022-11-11 19:59:11

一、纯资源Dll(http://www.cnblogs.com/hb_cattle/articles/1663059.html

纯资源Dll是仅包含资源(如图标、位图、字符串和对话框等)的Dll。使用纯资源Dll是在多个程序之间共享同一组资源的好方法。这种方法也常用于解决多国语言问题。

1、

1)新建空Win32 Dll;

2)添加图片资源;

VC++ CxSkinButton加载封装在dll文件中的资源文件(图片)

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来实现,但是我是这么使用的,具体其他更详细的区别,我还没有发现。希望能对你有所帮助。