SkinSharp作者简述
SkinSharp作者写的
SkinSharp是小生一个人独立开发的换肤产品。开发这个产品的原因和绝大多数朋友一样,买不起skin++。由于对ui非常热爱,曾经毕业时还想去skin++去工作,难耐他们老板看不上咱。后来一切证实没去是非常正确的。
因为对这方面非常感兴趣,索性就自力更生吧。 关于软件换肤原理其实非常简单,就是hook + subclass, 替换窗口过程,自己重写界面绘制,基本上就是响应WM_PAINT, WM_NCPAINT消息。但难点就在绘制的处理上,Windows标准控件那么多,每个控件的表现形式可不一样。所以基本上所有的工作都集中在控件的消息响应上了。其实,标准控件是很好做的,捧一本msdn基本都可以搞定。难点都集中在滚动条,菜单换肤上。市面上换肤产品多如牛毛,但真正滚动条和菜单换肤上做的很好的真的没几个,在滚动条和菜单上我也是花费了2年的时间研究。这个库从2006年初开始动工,到现在已经3年半多了。一般标准控件的绘制我就不说了,基本查查msdn就可以了。下面我着重说下控件内部滚动条和菜单的换肤原理。
控件的内部滚动条并不是单独的控件,他是Windows窗体(或控件)的组成元素,滚动条换肤的难点就是如何禁止系统绘制,因为滚动条位于非客户区,当滚动条状态改变时系统会进行绘制,所以你无论怎么截获消息,都无法让系统不进行绘制。有些朋友可能用滚动条控件来代替控件内部的滚动条,但这是山寨的做法,弊端也是显而易见的。想让系统不进行绘制,那你必须全权接管滚动条信息的管理和绘制,Windows提供了有关滚动条的API,比如
GetScrollInfo,
SetScrollInfo等等,实际上Windows在内部维护的对用户开放的数据结构仅仅是SCROLLINFO这个结构体而已。那么,我们可不可以自己维护这个ScrollInfo,让用户或系统调用的滚动条相关操作都被我们所控制,我们来响应。答案是肯定的。这又回到之前我们说的原理Hook, 这次需要Hook的是API,
将滚动条的操作转入我们的处理过程,处理后返回给系统。这样就达到了我们的目的。至于API HOOK 方法很多,大家在网上一搜就可以找到一堆。
关于菜单的换肤,有些朋友可能已经知道菜单其实就是一个窗口类名为”#32768”, 所以你可以通过窗口类名来进行Hook了。主要的问题是你怎么才能获取到菜单的句柄呢?对于菜单消息,msdn上只有一个就是MN_GETHMENU, 不错,就是他。给菜单窗口发送这个消息就可以获取菜单句柄。这下好办了,有了菜单句柄,你可以随便操作了, 就这么简单。
还有一个比较难处理的就是窗口标题栏了,因为标题栏在元素改变时,系统也是会进行自绘的。很多换肤库(包括Skin++)的做法就是避开标题栏,把标题栏风格WS_CAPTION去掉,自己再留出一块非客户区再画标题栏,这种方法看似完美,其实弊端很多,对于窗体来说WS_CAPTION是一个很重要的风格。去掉WS_CAPTION系统菜单的很多项目就失效了。另外还有其他方便的弊端,比如在Vista系统下就可能出现系统绘制边框等等。所以作为换肤库,应该尽量避免修改程序的默认属性和风格。换肤库好比人的衣服,不能说衣服不合适,就要把骨头拆了。如何解决这个问题呢?其实有很多方法,比如设置剪裁区,锁定绘制等等。
原文链接:http://hi.baidu.com/liaomingsen/item/a07a3537951751179cc65e1a
SkinSharp作者简述相关推荐
- [2019BUAA软件工程]第1次阅读作业
[2019BUAA软件工程]第1次阅读作业 Tips Link 作业连接 [2019BUAA软件工程]第1次阅读作业 读<构建之法>的疑惑 个人开发流程(Personal Software ...
- 医学图像分析最新综述:走向深度
点击我爱计算机视觉标星,更快获取CVML新技术 今天arXiv新上一篇论文<Going Deep in Medical Image Analysis: Concepts, Methods, Ch ...
- Python真香之爬取古诗文网
最近在学习Python相关,学习了基本的语法后想搞点事情试试,所以来爬取下古诗文网中的相关作者信息 准备资料: 爬取目标:爬取古诗文网的唐代作者的信息 目标分析: 一级页面是所有唐代作者的列表,点击名 ...
- 朝花夕拾《精通CSS》一、HTML CSS 的基础
一.背景 翻出我4年前看的<精通CSS>一书,可惜当初没有整理读书笔记的习惯,最近又很少写前端,遂很多东西.知识点遗忘了,恰且现在 css 也有些变化和进步,遂一起打包整理,输出成几篇 b ...
- 说说计算机发展史在你印象里都有哪些内容,第三课 时间的脚印(精选5篇)
第三课 时间的脚印 2012年3月29日星期四 第三课时 深化学习课文 授课人:热孜完古丽 教学目标: 1 知识点:掌握说明顺序中逻辑顺序. 2 能力点:明确说明对象,理清文章思路:体会本文 生动有趣 ...
- Stetman读paper小记:ATTEQ-NN
注:本周笔者阅读了龚雪鸾.陈艳娇的文章ATTEQ-NN:Attention-based QoE-aware Evasive Backdoor Attacks.本文讲了作者设计的一种基于注意力机制的后门 ...
- 读书:冯唐的《金线》
<金线>是冯唐在2022年11月刚刚出版的新书,正如书名,全书提出了金线原理,声称它可以解决一切问题,超越了麦肯锡的金字塔原理. 成事学四大公理: 成事学第一公理:人类在任何时候都要追求资 ...
- 真正的计算语言学?!
真正的计算语言学?! 2003-3-26 -- 读 R. Hausser<计算语言学基础> 刘海涛 Roland Hausser Foundations of Computational ...
- 论文笔记: 对抗样本 CVPR2021 Enhance Transferability of Adversarial Attacks through Variance Tuning
目录 Abstract 摘要 1. Introduction 引言 1.1 背景 1.2 引入 2. 相关工作 Related Work 2.1 对抗样本攻击 2.2 对抗样本防御 Adversari ...
- 读后感---图像分割的新理论和新方法
读后感之<图像分割的新理论和新方法> 我阅读的论文题目是<图像分割的新理论和新方法>,这篇论文发表在2010年2月,第2A期的<电子学报>上.选择该论文阅读的主要目 ...
最新文章
- [每周软件]:Cucumber:未完待续的原因
- MySQL返回多行错误怎么处理_结果包含多个行错误mysql
- Redis运维和开发学习笔记(6) 监控Redis工作状态-info命令
- FTP 协议和 HTTP 协议的比较
- Centos7 安装Docker(v2021 version 20.10.5) 并通过docker-compose运行TiDB集群
- Python文件读取(1.1)
- 搜索引擎如何评估外贸网站内容?
- KVM虚拟化基础概念
- STM32 rtc唤醒 低功耗待机模式 避免iwdog看门狗方案
- 74HC573芯片介绍
- linux限制进程带宽,再Linux系统中限制网络带宽使用的教程
- Catch the moments of your life. Catch them while you're young and quick.
- 柯西过程(Cauchy process)
- Azure NSG(安全组)
- 【日志】Debug和简单对拍代码
- Python 变量作用域与函数(4)
- Swing关于JButton的文本和图片之间间距调整的问题纪要!
- 经纬度、平面坐标系转换方法
- 分库与分表带来的分布式困境与应对之策
- 海上钢琴家 与程序员
热门文章
- android 通讯录恢复,通讯录恢复
- cad计算机功能键,【答疑】Auto CAD2014计算器快捷键是什么呢?? - 视频教程线上学...
- 揭秘:为何冬天成都游戏玩家整体水平会下滑?
- vb html单选按钮,VB教程:单选按钮(OptionButton)
- win32,使用PDFlib生成PDF文件
- swf文件的反编译或着flash文件的反编译
- 单片机的C语言应用程序设计实训教程,单片机的c语言程序设计实训
- Python动作冒险类游戏推荐:一款奔跑的玛丽冒险岛游戏、你能坚持几天丫?
- Lidar Studio点云处理与分析软件V1.1
- java环境安装菜鸟教程_Linux菜鸟教程(一:JDK安装和java环境配置)