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

  • 相关阅读:
    1023. 组个最小数 (20)
    1048. Find Coins (25)
    1050. String Subtraction (20)
    1041. Be Unique (20)
    1047. 编程团体赛(20)
    1043. 输出PATest(20)
    Java基础学习总结(8)——super关键字
    Java基础学习总结(8)——super关键字
    Java基础学习总结(7)——Object类
    Java基础学习总结(7)——Object类
  • 原文地址:https://www.cnblogs.com/onwayo/p/3551766.html
Copyright © 2011-2022 走看看