且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-08-28 15:16:39

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

 

从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件CResSkinApp::InitInstance() 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件CAppFace af ; //line 1 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件

从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件af.Start(_T("IDR_MY_URF"),GTP_LOAD_RESOURCE,NULL,_T("MYTYPE"),NULL) ; //line 2 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件

从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件CResSkinDlg dlg; 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件m_pMainWnd = &dlg; 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件int nResponse = dlg.DoModal(); 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件af.Remove() ; //line 3 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件

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


编译... 一切搞定 !


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


 

从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件CResSkinApp::InitInstance() 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件CAppFace af ; //Init 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
//Load 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件

从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件if(HRSRC hr = ::FindResource(NULL,"IDR_MY_URF","MYTYPE")) 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件ULONG nResSize = ::SizeofResource(NULL,hr) ; 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件if(HGLOBAL hz = ::LoadResource(NULL,hr)) 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件char* p = (char*)LockResource(hz); 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件if(p) 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件af.Start(p,GTP_LOAD_MEMORY,nResSize,NULL,NULL) ; 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件}
 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件}
 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件CResSkinDlg dlg; 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件m_pMainWnd = &dlg; 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件int nResponse = dlg.DoModal(); 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件af.Remove() ; //Release 
从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件

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



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


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

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






四、结束语:


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