SKN皮肤库是一款基于bmp格式和xml文件组成的皮肤库,当我们下载好SKN皮肤库后会发现每个皮肤都是一个SKN,其这些SKN被压缩的,当你用WINRAR打开时会发现很多bmp格式的图片和一个xml文件,xml文件记录这些图片的布局,这些图片其实也就是按钮等一些样式!
当我们加载时,在内存中SKN会将我们的按钮等其它控件的绘图消息一律接管,并更管为对应的skn皮肤库里的图片样式!
加载方法:
首先先下载一个SKN皮肤库:
下载地址:
网盘下载(博主分享)
提取码:
8awt
MFC方式加载:
首先新建一个MFC程序:
在创建向导中,选择基于对话框:
创建完成之后需要将程序的编码改成多字节不能使用unicode字节,因为免费的skn皮肤不能编译这一字节的程序,会报错(免费的使用的是多字节编码两者编码不能冲突,因为包含文件关系,我们会包含skn的皮肤库)
在属性页里改掉:
将这三个文件放入到运行目录下
然后将头文件和lib加载进来到stdafx头文件里:
#include "SkinPPWTL.h"
#pragma comment(lib, "SkinPPWTL.lib")
如果提示没有找到或者报错,将文件copy到源代码路径一份(有的配置是从源代码路径里寻找)
最后在加载皮肤:
注意要在InitInstance函数里增加:
BOOL CMFCApplication1App::InitInstance()
{
skinppLoadSkin(_T("skn\\blue.ssk"));
}
注意此皮肤库的函数原型是TCHAR所以要用_T转义我们的多字节字符(使用宽字符)
卸载:
skinppExitSkin();无参数 bool类型
换皮肤:
需要两个函数,首先先调用:
skinppRemoveSkinHwnd()将已加载皮肤的窗口句柄传递进去,会临时移除此窗口的绘图,当接到绘图时直接传递给默认的windows消息处理
然后在调用:
skinppSetSkinHwnd()将窗口句柄传递进去即可再次加载Load里的皮肤
skinppSetNoSkinHwnd()参数传递窗口句柄,会直接取消对此窗口的消息接管给默认的Windows消息,永久无效
如果需要实现运行时自动换皮肤可以用如下代码:
1.移除皮肤:
skinppExitSkin();
2.加载新的皮肤资源:
skinppLoadSkin(_T("skn\\blue.ssk"));
Win32代码:
第一步将文件copy到路径下
然后依旧在stdafx里加入头文件:
#include "SkinPPWTL.h"
#pragma comment(lib, "SkinPPWTL.lib")
最后在InitInstance函数里加入加载代码即可:
skinppLoadSkin(_T("skn\\blue.ssk"));
注意skn版本的不同,部分skn版本会使用额外的sdk里提供的类型,而老编译器版本里没有报找不到指定类型之类的,建议大家vs版本较低就使用较低的skn,或者使用收费的这些都不是问题!
如果编译不过可以在网络上寻找其它的版本,但api名称可能不一样,但是加载方法就是和上面一样,此文章可以作为参考!