Windows核心编程_SKN皮肤库

本文介绍了SKN皮肤库,它基于bmp格式和xml文件。详细说明了其加载方法,包括MFC方式和Win32代码加载,还提及卸载、换肤操作。同时指出不同skn版本和编译器版本可能存在的问题,最后给出了2019年7月9日更新的最新方法及官方网站。

  SKN皮肤库是一款基于bmp格式和xml文件组成的皮肤库,当我们下载好SKN皮肤库后会发现每个皮肤都是一个SKN,其这些SKN被压缩的,当你用WINRAR打开时会发现很多bmp格式的图片和一个xml文件,xml文件记录这些图片的布局,这些图片其实也就是按钮等一些样式!

当我们加载时,在内存中SKN会将我们的按钮等其它控件的绘图消息一律接管,并更管为对应的skn皮肤库里的图片样式!

加载方法:

首先先下载一个SKN皮肤库:

下载地址:

https://pan.baidu.com/s/1c0Ji_ricRghAK7vcoDbuuw(博主分享)

提取码:

97p2

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名称可能不一样,但是加载方法就是和上面一样,此文章可以作为参考!

 

 

 

 

 

 

 

 

 

 

2019.7.9更新:

上述方法可以参考,下面是最新方法:

包含:

#include "SkinH.h"
#pragma comment(lib, "SkinHu.lib")

初始化和加载

 SkinH_Attach();
 SkinH_AttachEx(L"1.she", NULL);

 

官方网站:

http://www.skinsharp.com/htdocs/docs.htm

因为是免费版所以有小衣服

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

17岁boy想当攻城狮

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值