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

  • 相关阅读:
    python 常用的模块(hashlib)转
    python 常用的模块(struct)转
    python 常用的模块(base64)转
    python 常用的模块(collections)转
    django xadmin的使用和改造
    django静态html中做动态变化
    django 用model来简化form
    InstallShield2015制作安装包----------安装后实现电脑开机自启动
    InstallShield2015创建安装包
    InstallShield :cannot rename directory ...
  • 原文地址:https://www.cnblogs.com/onwayo/p/3551766.html
Copyright © 2011-2022 走看看