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

简介: 由于单位上最近要开发一个内部使用的小型项目,我需要一个运行稳定的,能够将皮肤文件放到资源里的并且易于使用的界面开发包,当然,免费的最好。于是利用google一阵狂搜,嘿,真还找到了这样的一个开发库: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() 成员函数中添加如下代码

 

None.gifCResSkinApp::InitInstance() 
None.gif
ExpandedBlockStart.gif
InBlock.gif
InBlock.gifdot.gif 
InBlock.gif
InBlock.gifCAppFace af ; //line 1 
InBlock.gif

InBlock.gifaf.Start(_T("IDR_MY_URF"),GTP_LOAD_RESOURCE,NULL,_T("MYTYPE"),NULL) ; //line 2 
InBlock.gif

InBlock.gif
InBlock.gif
InBlock.gifCResSkinDlg dlg; 
InBlock.gif
InBlock.gifm_pMainWnd = &dlg; 
InBlock.gif
InBlock.gifint nResponse = dlg.DoModal(); 
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gifdot.gif 
InBlock.gif
InBlock.gifaf.Remove() ; //line 3 
InBlock.gif

InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif}
 
None.gif


编译... 一切搞定 !


3. 上面是官方的做法,由于appface 也支持从内存中加载urf,所以您也可以这样做:


 

None.gifCResSkinApp::InitInstance() 
None.gif
ExpandedBlockStart.gif
InBlock.gif
InBlock.gifdot.gif 
InBlock.gif
InBlock.gifCAppFace af ; //Init 
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
//Load 
InBlock.gif

InBlock.gifif(HRSRC hr = ::FindResource(NULL,"IDR_MY_URF","MYTYPE")) 
InBlock.gif
ExpandedSubBlockStart.gif
InBlock.gif
InBlock.gifULONG nResSize = ::SizeofResource(NULL,hr) ; 
InBlock.gif
InBlock.gifif(HGLOBAL hz = ::LoadResource(NULL,hr)) 
InBlock.gif
ExpandedSubBlockStart.gif
InBlock.gif
InBlock.gifchar* p = (char*)LockResource(hz); 
InBlock.gif
InBlock.gifif(p) 
InBlock.gif
InBlock.gifaf.Start(p,GTP_LOAD_MEMORY,nResSize,NULL,NULL) ; 
InBlock.gif
ExpandedSubBlockEnd.gif}
 
InBlock.gif
ExpandedSubBlockEnd.gif}
 
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gifCResSkinDlg dlg; 
InBlock.gif
InBlock.gifm_pMainWnd = &dlg; 
InBlock.gif
InBlock.gifint nResponse = dlg.DoModal(); 
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gifdot.gif 
InBlock.gif
InBlock.gifaf.Remove() ; //Release 
InBlock.gif

InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif}
 
None.gif



你可以使用这种方法从资源中加载其它数据。


需要注意的是: 如果将URF添加进资源时,资源ID没有用双引号括起来, 加载时必须这样写: 

af.Start(_T("IDR_MY_URF"),GTP_LOAD_RESOURCE,NULL,MAKEINTRESOURCE(_T("MYTYPE")),NULL)) ; //line 2






四、结束语:


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

目录
相关文章
|
29天前
|
前端开发 PHP 数据安全/隐私保护
WordPress独立资源下载页面插件,基于Xydown美化
xydown是一款wordpress的独立下载页面插件,主要适用于wp建站用户使用,有些用户在发布文章的时候想要添加一些下载资源,使用这款插件可以把下载的内容独立出来,支持添加本地下载或者百度网盘蓝奏网盘的网址,并且可以自定义文件信息,包括设置文件名称、文件大小、更新日志以及适用版本等内容,同时还支持自定义文件信息以及添加自定义广告等。
58 0
WordPress独立资源下载页面插件,基于Xydown美化
|
4月前
|
网络安全 Windows
win10风格美化以及新建系统后优化
win10风格美化以及新建系统后优化
25 0
|
12月前
|
Windows
QT桌面项目(第一个应用程序 桌面壁纸软件)
QT桌面项目(第一个应用程序 桌面壁纸软件)
95 0
|
计算机视觉
ps2023软件全新版免费调色滤镜插件exposure图片后期处理工具
许多朋友都习惯于用手机拍照,但拍出来的效果却没有别人拍出来的好看,不知道如何解决。这种情况下你只需一个适合自己的照片处理工具,就可以提升原照片的美观度。那么,有哪些好用的照片处理工具,如何用照片处理工具处理照片,下面就有我来为各位进行讲解,希望能够给大家一些帮助。
447 1
ps2023软件全新版免费调色滤镜插件exposure图片后期处理工具
|
人工智能
CorelDRAW2022永久免费版本矢量插图更新下载
CorelDRAW是用于创建高质量矢量插图、徽标设计和页面布局更直观的多功能图形应用程序。历经22个版本的变革、更新、改进和增强,CorelDRAW Graphic Suite 2022 的功能也变得更加全面且强大。
837 0
|
测试技术
解决duilib使用zip换肤卡顿的问题(附将资源集成到程序中的操作方法)
转载请说明原出处,谢谢~~        今天在做单子是,客户要求做换肤功能,为此我专门写了一个换肤函数,并且把各种皮肤资源压缩为各个zip文件来换肤。
1072 0
|
C# Windows
艾伟_转载:用C#设计Windows应用程序模板
 通常windows应用程序都有相似的特征:控件、菜单、工具条、状态栏等等。每次我们开始作一个新的windows应用程序时都是以相同的事情开始:建立项目,添加控件和事件处理器。如果我们有一个模板,那么我们就可以节约大量的时间了。
833 0