从资源中加载皮肤

2016-01-29 11:58 45 1 收藏

从资源中加载皮肤,从资源中加载皮肤

【 tulaoshi.com - C语言心得技巧 】

从资源中加载皮肤
——
使用免费界面库 AppFace For VC 0.2 美化您的软件

作者:翼山

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

下载源代码

  由于单位上最近要开发一个内部使用的小型项目,我需要一个运行稳定的,能够将皮肤文件放到资源里的并且易于使用的界面开发包,当然,免费的最好。于是利用google一阵狂搜,嘿,真还找到了这样的一个开发库:AppFace For VC 0.2。
  AppFace For VC 支持Win9X/NT/2K/XP,UNICODE/ANSI,能够对目标进程里的所有Widows标准控件,系统菜单,通用对话框等实现换肤,对非商业用途而言,它是完全免费的。关键的是AppFace的使用非常简单,很容易添加到已有的工程中。我使用的是 0.2 版,你也可以到它的网站 http://www.appface.com 去下载最新版本 。
  AppFace 支持三种皮肤加载方式,从磁盘文件加载,从资源加载,从内存加载。下面我就说说如何从资源加载URF皮肤文件:
  首先,要确保你下载了AppFace for VC 开发包,我们要用到其中的三个文件: "appface.h", "appface.dll" ,"gtclassic.urf" 。
  接着,创建一个 VC 可执行文件工程, MDI/SDI/DIALOG/WIN32 类型的都可以,我以创建一个DIALOG 工程 ResSkin 进行说明 。将"appface.h" 拷贝到该工程目录下,将"Appface.dll"拷贝到该工程的输出目录下,例如:"debug",将"gtclassic.urf"拷贝到资源所在目录下 。在VC 的项目管理器中进入资源管理项,在右键菜单中选择"Import",将"gtclassic.urf"添加进工程,资源类型设定为: "MYRESTYPE",资源ID设定为"IDR_MY_URF"。注意:资源ID 前面一定要加双引号 。
准备工作全部完成了,现在进入正题:

1、在ResSkin.cpp 中加入: #include "appface.h"
2、在CResSkinApp::InitInstance() 成员函数中添加如下代码

      CResSkinApp::InitInstance()        {        ...        CAppFace af ; //line 1        af.Start(_T("IDR_MY_URF"),GTP_LOAD_RESOURCE,NULL,_T("MYTYPE"),NULL)         ; //line 2      CResSkinDlg dlg;        m_pMainWnd = &dlg;        int nResponse = dlg.DoModal();      ...        af.Remove() ; //line 3      }
  编译... 一切搞定 !
3、上面是官方的做法,由于appface 也支持从内存中加载urf,所以您也可以这样做:
      CResSkinApp::InitInstance()        {        ...        CAppFace af ; //Init      //Load        if(HRSRC hr = ::FindResource(NULL,"IDR_MY_URF","MYTYPE"))        {        ULONG nResSize = ::SizeofResource(NULL,hr) ;        if(HGLOBAL hz = ::LoadResource(NULL,hr))        {        char* p = (char*)LockResource(hz);        if(p)        af.Start(p,GTP_LOAD_MEMORY,nResSize,NULL,NULL) ;        }         }      CResSkinDlg dlg;        m_pMainWnd = &dlg;        int nResponse = dlg.DoModal();      ...        af.Remove() ; //Release      }

你可以使用这种方法从资源中加载其它数据。
  需要注意的是: 如果将URF添加进资源时,资源ID没有用双引号括起来, 加载时必须这样写:
af.Start(_T("IDR_MY_URF"),GTP_LOAD_RESOURCE,NULL,MAKEINTRESOURCE(_T("MYTYPE")),NULL)) ; 

//line 2


运行效果图

结束语:
  也尝试过使用其它的界面开发库,感觉AppFace是最容易使用的,加载速度最快,稳定性也不错。不过它的免费版只提供了三个urf皮肤文件,略为有些遗憾。 欢迎转载。

来源:http://www.tulaoshi.com/n/20160129/1484093.html

延伸阅读
如何在C#中加载自己编写的动态链接库(DLL) 李伟华 msn:liweihua200204@hotmail.com 摘要 本文主要讲述如何在C#中逐步实现加载自己用C++语言编写的动态链接库,以及在导入时如何进行C#和C++语言的数据类型匹配关键词 C# C++ 动态链接库 加载 数据类型匹配 一、发生的背景在开发新项目中使用了新的语言开发C#和新的技术方案WEB Service,但是...
标签: 美容护肤
用玫瑰花泡澡对皮肤好 1 材料:干玫瑰花20克。 步骤:将干玫瑰花用开水浸泡10分钟后全部倒入注有热水的浴缸中,泡澡约20分钟后冲净即可。 效果:玫瑰花能够调理气血,改善内分泌,特别适合皮肤干燥粗糙、肤色晦暗的人使用。 用苹果醋泡澡对皮肤好 2 材料:苹果1个,醋50毫升。 步骤:将苹果洗净后去皮、去核,切块后倒入食品加工机中...
标签: 美容 美容方法
阳光中有紫外光,紫外光是损伤皮肤的罪魁祸首。晒黑、红肿乃至水泡,让皮肤迅速衰老。Tulaoshi.Com 紫外线分uva、uvb两种。 uvb可以使皮肤在短时间内晒伤、晒红(对一般人来说是25分钟左右),现在市场上绝大多数防晒品是uvb型的,spf就是uvb防护能力的标准。 uva是可怕的阳光杀手,可以穿透皮肤表层,深入真皮一下组织,...
加载资源文件比较常用的有两种: 一、用ClassLoader,说到这里就不得不提一下ClassLoader的分类,java内置的ClassLoader主要有三种, 第一种是根类加载器(bootstrap class loader),用C++来编写,负责将一些关键的Java类,如java.lang.Object和其他一些运行时代码先加载进内存中。 所负责加载的包:BootStrp------JRE/lib/rt.jar 第二种是...
Criteria是通过一组条件表达式(Expression)来加载数据的,它返回满足条件的对象集合。主要接口为ICriteria,实现为CriteriaImpl类,此类加有Internal修饰,因此不能在程序集外显示创建,nhibernate在session对象中为我们提供了一个方法CreateCriteria,此方法返回ICriteria接口。这里列出了ICriteria接口的一些方法:SetMaxResults:设置返回...

经验教程

557

收藏

24
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部