当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 从资源中加载皮肤

VC++
几个数字信号处理算法程序
简易软盘镜像工具的实现及操作系统编写初步
教你使用正则表达式
C++ 扩展和嵌入 Python
拷贝构造和赋值操作符,C#和本机 C++ 代码的互用性
精通VC与Matlab联合编程(六)
精通VC与Matlab联合编程(五)
一个排序用的C++函数模板
浅析VC与MATLAB联合编程
C++编译器如何实现异常处理
文件重定义冲突的分析与解决
一步一步实现MFC扩展DLL中导出类和对话框
C宏:智者的利刃,愚者的恶梦!
引用的作用
《UTF-8与GB2312之间的互换》的改进
程序风格的要素-C++风格指南
VC+6.0实现文本串的自由拆分
怎样给串行化类分配版本号(可配置版本模式)
在常规的编程任务中使用新的 <tuple> 库
使用 typedef 抑制劣质代码

VC++ 中的 从资源中加载皮肤


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 93 ::
收藏到网摘: n/a

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

作者:翼山

下载源代码

  由于单位上最近要开发一个内部使用的小型项目,我需要一个运行稳定的,能够将皮肤文件放到资源里的并且易于使用的界面开发包,当然,免费的最好。于是利用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皮肤文件,略为有些遗憾。 欢迎转载。