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

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

Windows核心编程_SKN皮肤库相关推荐

  1. 《windows核心编程系列》二谈谈ANSI和Unicode字符集

    第二章:字符和字符串处理 使用vc编程时项目-->属性-->常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集.一般情况下说Unicode都是 ...

  2. 插入DLL和挂接API——Windows核心编程学习手札之二十二

    插入DLL和挂接API --Windows核心编程学习手札之二十二 如下情况,可能要打破进程的界限,访问另一个进程的地址空间: 1)为另一个进程创建的窗口建立子类时: 2)需要调试帮助时,如需要确定另 ...

  3. 线程本地存储器——Windows核心编程学习手札之二十一

    线程本地存储器 --Windows核心编程学习手札之二十一 C/C++运行期库使用线程本地存储器,运行期库是在多线程应用程序出现前设计的,因此运行期库里的大多数函数是用于单线程应用程序的.函数strt ...

  4. DLL的高级操作技术——Windows核心编程学习手札之二十

    DLL的高级操作技术 --Windows核心编程学习手札之二十 显示加载DLL模块: HINSTANCE LoadLibrary(PCTSTR pszDLLPathName); HINSTANCE L ...

  5. 线程基础知识——Windows核心编程学习手札系列之六

    线程基础知识 --Windows核心编程学习手札系列之六 线程与进程一样由两部分构成:一是线程的内核对象,操作系统用它来对线程实施管理,也是系统用来存放线程统计信息的地方:二是线程堆栈,用于维护线程在 ...

  6. 进程——Windows核心编程学习手札系列之四

    进程 --Windows核心编程学习手札系列之四 进程是一个正在运行的程序的实例,有两个部分组成:一个是操作系统用来管理进程的内核对象,内核对象是系统用来存放关于进程的统计信息的地方:另一个是地址空间 ...

  7. Unicode——Windows核心编程学习手札之二

    Unicode --Windows核心编程学习手札之二 处理软件本地化的核心在于处理不同的字符集.文本串一直作为一系列单字节字符进行编码,并在结尾处放上一个零,当调用strlen函数时,获取以/0结尾 ...

  8. Windows核心编程_获取鼠标指定位置的RGB颜色值

    Windows核心编程_获取鼠标指定位置的RGB颜色值 大家平常会见到很多屏幕取色工具,其原理都是获取鼠标位置的屏幕像素点颜色! 一般思路都是:获取鼠标位置,然后取出鼠标指向的屏幕像素点颜色! Get ...

  9. [笔记]Windows核心编程《二十》DLL的高级操作技术

    系列文章目录 [笔记]Windows核心编程<一>错误处理.字符编码 [笔记]Windows核心编程<二>内核对象 [笔记]Windows核心编程<三>进程 [笔记 ...

最新文章

  1. 教育部办公厅关于2020-2021学年面向中小学生的全国性竞赛活动名单的公示
  2. mxnet统计运算量
  3. 对于坐拥海量数据的金融企业来说,大数据治理意味着什么?
  4. MySQL 5.6版本GTID复制异常处理一例
  5. os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' 无效
  6. 实习成长之路——设计原则三:里式替换(LSP)跟多态有何区别?哪些代码违背了LSP?
  7. 程序员,保险公司招聘不要轻易跑过去,省省路费省省时间,别浪费感情,特别是招聘什么业务主管经理的...
  8. 易之风门诊收费系统 v1.0 官方
  9. 6款 jQuery Lightbox图片查看触控插件
  10. 【Udacity项目】TMDb电影数据集探索分析
  11. 计算机科学考研难不难,计算机考研有多难
  12. Oracle 11g 扩展UNDO表空间
  13. linux识别不了喇叭,Ubuntu扬声器无声的解决方法
  14. Alpha阶段敏捷冲刺⑧
  15. 数组方法中会更改原数组,不会更改原数组(详细)
  16. Java计算两个日期相差的月数
  17. SEO 搜索引擎优化(Google 排名)
  18. 知识点6--Docker的镜像命令
  19. 编程是什么,什么是编程?
  20. camtasia studio2022电脑屏幕录像录屏剪辑

热门文章

  1. TARS 系统 —— UI 自动化解决方案
  2. 【银河麒麟V10】【桌面】ftp常见场景搭建
  3. Vivado逻辑分析仪使用教程
  4. 周总结20200302-20200309
  5. ai伪原创工具怎么样(附代码)
  6. 奥浦迈完成上市辅导:年营收突破1亿元,或拟在科创板挂牌
  7. 6681. 【2020.06.02省选模拟】图
  8. 粉丝问我七夕送点啥,我用Python教你一招!
  9. 青春,不过几届世界杯系列1 —— 我经历的2002 ~ 2022年五届世界杯速览
  10. tcp ip 协议 学习