SkinFeature的使用

来源:互联网 发布:ubuntu联网后无法上网 编辑:程序博客网 时间:2024/05/16 23:42

SkinFeature皮肤界面控件介绍
SkinFeature 完全支持Win9XNT2KXP,UNICODE、ANSI,能够对目标进程里的所有Widows标准控件,系统菜单,通用对话框等实现换肤。
而且完全支持PNG图象格式。同时,皮肤文件rss可以设置密码!对非商业用途而言,它是完全免费的。
关键的是SkinFeature的使用非常简单,很容易添加到已有的工程中。

SkinFeature 支持三种皮肤加载方式,从磁盘文件加载,从资源加载,从内存加载。

下面就说说如何加载磁盘的普通rss皮肤文件 (以VC对话框工程为例)
首先,我们要用到的4个文件 SkinFeature.h, SkinFeature.lib,SkinFeature.dll ,Coolorange.rss 。
接着,将上述4个文件拷贝到该工程目录下

准备工作全部完成了,现在进入正题
1.在MYSkin.cpp文件中加入
#pragma comment (lib,"SkinFeature")
#include "SkinFeature.h"

2.在CMYSkinApp::InitInstance() 成员函数中添加如下代码
CResSkinApp::InitInstance()
{
//... 添加以下两行
InitializeSkin(); //初始化skinfeature界面库,这句话可加可不加,主要是当多线程中换肤需要加。
LoadSkinFile("Coolorange.rss"); //

CResSkinDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
//...
}
int CResSkinApp::ExitInstance()
{
//退出skinfeature界面库,释放内存资源。
UnLoadSkin();
return CWinApp::ExitInstance();
}
编译... 搞定 !
发布时,执行目录内应携带SkinFeature.dll ,Coolorange.rss这两个文件。

=========================================
以资源文件的方式加载rss皮肤文件(以VC对话框工程为例)

首先,4个文件 SkinFeature.h, SkinFeature.lib,SkinFeature.dll ,Coolorange.rss
接着,将前3个文件拷贝到该工程目录下, 将"Coolorange.rss"拷贝到资源所在目录下 。
将"Coolorange.rss"添加进VC工程,资源类型设定为: "RSS",资源ID设定为"IDR_RSS"。
注意:资源ID一定要加双引号 。

进入正题:
1.在ResSkin.cpp 中加入: #include "SkinFeature.h"
2.在CResSkinApp::InitInstance() 成员函数中添加如下代码
CResSkinApp::InitInstance()
{
//...
//只需添加如下一行代码从资源文件加载skinfeature 皮肤文件 rss 。其中最后一个参数是皮肤文件的密码
LoadSkinFromResource(AfxGetInstanceHandle(),(LPTSTR)MAKEINTRESOURCE(IDR_RSS),_T("rss"),_T("Coolorange.rss"), "");

CResSkinDlg dlg;
//...
}
int CResSkinApp::ExitInstance()
{
//退出skinfeature界面库,释放内存资源。
UnLoadSkin();

return CWinApp::ExitInstance();
}
=========================================
动态链接方式:(不用SkinFeature.h, SkinFeature.lib)

将SkinFeature.dll ,Coolorange.rss拷贝到工程目录下
第一步:在ResSkin.cpp函数体外,公共代码处添加
typedef bool (Dll_LoadSkinFile) (LPCTSTR pszFileName, LPCTSTR pszPassWord = NULL);//定义函数类型,返回值和参数要和DLL中定义的一样
typedef bool (Dll_UnLoadSkin) ( );
Dll_LoadSkinFile* pLoadSkinFile;//生成个函数指针
Dll_UnLoadSkin* pUnLoadSkin;//生成个函数指针

HINSTANCE hInstance;


第二步:InitInstance() 中添加
CResSkinApp::InitInstance()
{
//... 添加下面这3句
hInstance=LoadLibrary("SkinFeature.dll");//加载DLL
pLoadSkinFile=(Dll_LoadSkinFile*)GetProcAddress(hInstance,"LoadSkinFile");
(*pLoadSkinFile)("Coolorange.rss",""); //使用函数

CResSkinDlg dlg;
//...
}
int CResSkinApp::ExitInstance()
{

(*pUnLoadSkin) ( ); //卸载skinfeature界面库,释放内存资源
VERIFY(FreeLibrary(hInstance)) ;//卸载DLL

return CWinApp::ExitInstance();
}

不过,经过测试Debug版可能会提示错误,Release版OK。

还要提醒一下,皮肤文件名最好不要改为其他皮肤的名字,否则程序会死。

原创粉丝点击