Windows核心编程_SKN皮肤库
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皮肤库相关推荐
- 《windows核心编程系列》二谈谈ANSI和Unicode字符集
第二章:字符和字符串处理 使用vc编程时项目-->属性-->常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集.一般情况下说Unicode都是 ...
- 插入DLL和挂接API——Windows核心编程学习手札之二十二
插入DLL和挂接API --Windows核心编程学习手札之二十二 如下情况,可能要打破进程的界限,访问另一个进程的地址空间: 1)为另一个进程创建的窗口建立子类时: 2)需要调试帮助时,如需要确定另 ...
- 线程本地存储器——Windows核心编程学习手札之二十一
线程本地存储器 --Windows核心编程学习手札之二十一 C/C++运行期库使用线程本地存储器,运行期库是在多线程应用程序出现前设计的,因此运行期库里的大多数函数是用于单线程应用程序的.函数strt ...
- DLL的高级操作技术——Windows核心编程学习手札之二十
DLL的高级操作技术 --Windows核心编程学习手札之二十 显示加载DLL模块: HINSTANCE LoadLibrary(PCTSTR pszDLLPathName); HINSTANCE L ...
- 线程基础知识——Windows核心编程学习手札系列之六
线程基础知识 --Windows核心编程学习手札系列之六 线程与进程一样由两部分构成:一是线程的内核对象,操作系统用它来对线程实施管理,也是系统用来存放线程统计信息的地方:二是线程堆栈,用于维护线程在 ...
- 进程——Windows核心编程学习手札系列之四
进程 --Windows核心编程学习手札系列之四 进程是一个正在运行的程序的实例,有两个部分组成:一个是操作系统用来管理进程的内核对象,内核对象是系统用来存放关于进程的统计信息的地方:另一个是地址空间 ...
- Unicode——Windows核心编程学习手札之二
Unicode --Windows核心编程学习手札之二 处理软件本地化的核心在于处理不同的字符集.文本串一直作为一系列单字节字符进行编码,并在结尾处放上一个零,当调用strlen函数时,获取以/0结尾 ...
- Windows核心编程_获取鼠标指定位置的RGB颜色值
Windows核心编程_获取鼠标指定位置的RGB颜色值 大家平常会见到很多屏幕取色工具,其原理都是获取鼠标位置的屏幕像素点颜色! 一般思路都是:获取鼠标位置,然后取出鼠标指向的屏幕像素点颜色! Get ...
- [笔记]Windows核心编程《二十》DLL的高级操作技术
系列文章目录 [笔记]Windows核心编程<一>错误处理.字符编码 [笔记]Windows核心编程<二>内核对象 [笔记]Windows核心编程<三>进程 [笔记 ...
最新文章
- 教育部办公厅关于2020-2021学年面向中小学生的全国性竞赛活动名单的公示
- mxnet统计运算量
- 对于坐拥海量数据的金融企业来说,大数据治理意味着什么?
- MySQL 5.6版本GTID复制异常处理一例
- os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' 无效
- 实习成长之路——设计原则三:里式替换(LSP)跟多态有何区别?哪些代码违背了LSP?
- 程序员,保险公司招聘不要轻易跑过去,省省路费省省时间,别浪费感情,特别是招聘什么业务主管经理的...
- 易之风门诊收费系统 v1.0 官方
- 6款 jQuery Lightbox图片查看触控插件
- 【Udacity项目】TMDb电影数据集探索分析
- 计算机科学考研难不难,计算机考研有多难
- Oracle 11g 扩展UNDO表空间
- linux识别不了喇叭,Ubuntu扬声器无声的解决方法
- Alpha阶段敏捷冲刺⑧
- 数组方法中会更改原数组,不会更改原数组(详细)
- Java计算两个日期相差的月数
- SEO 搜索引擎优化(Google 排名)
- 知识点6--Docker的镜像命令
- 编程是什么,什么是编程?
- camtasia studio2022电脑屏幕录像录屏剪辑