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

原文地址:https://www.cnblogs.com/onwayo/p/3551766.html