Windows核心编程_SKN皮肤库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bjbz_cxy/article/details/88733080

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

猜你喜欢

转载自blog.csdn.net/bjbz_cxy/article/details/88733080