[转贴]Skin技术实现框架(二)
来源:互联网 发布:java orm 不需要xml的 编辑:程序博客网 时间:2024/05/22 01:27
原理
上次基本上是些介绍,也就是废话,今天讲讲实现Skin的基本原理吧。要实现自己独特的界面,方法有很多啦,上次也说过,这里只讲一种,就是通过消息钩子改变已有控件的外观。这种方法的好处是可以不必修改程序已经完成的标准界面,只要把钩子函数挂上,所有的界面就都变了,使用起来非常方便。这里的基本原理就是下面这个调用:
SetWindowsHookEx(WH_CALLWNDPROC, HookProc, 0, lThreadID);
WH_CALLWNDPROC钩子可以截获所有线程ID为lThreadID的线程内的窗口消息,这样我们就有机会处理这些消息。
但是,光截获消息还不够,我们还必须知道这些消息是谁发出的,Button和EditBox发出的相同消息显然必须得到不同的处理。幸运的是,从消息的参数里,我们可以得到窗口句柄,而通过窗口句柄,我们可以得到窗口类。这里说的窗口类可不是C++的类,而是Windows系统中的窗口类名。例如,按钮的窗口类是“Button”,组合框的窗口类是“ComboBox”...这些在MSDN里面都可以找到的,另外,还有一些文档中不存在的窗口类名,比如对话框,有一个叫“#32770”的类名,而菜单,实际上也是一个窗口,其类名是“#32768”。有意思吧,有了这些信息,我们就可以区分不同窗口进行处理了。
至于处理些什么消息,显然最重要的是WM_PAINT消息。这样我们可以重载系统默认的绘图方式,而把控件窗口画成我们想要的样子。但是只处理WM_PAINT消息也是不够的,因为控件的样式不是一成不变的,看看WindowsXP的显示效果,以按钮为例,有很多种样式,普通样式、鼠标在按钮上的样式、鼠标按住按钮的样式、鼠标按住按钮又移动到按钮外的样式...... 为了实现动态的炫目的Skin效果,我们还需要截取一些其他消息,例如鼠标消息。下载的代码里有Mac按钮的一个实现,看一下就知道了。
原理就这么多了,好像不是很复杂是吧,不过知道了原理和能写出实际工作的代码,还是有很大区别的。还有非常关键的设计和编码,这些,留等下次在说吧,今天就到这里,就到这里了
再贴个图吧
- [转贴]Skin技术实现框架(二)
- [转贴]Skin技术实现框架(一)
- [转贴]Skin技术实现框架(三)
- [转贴]Skin技术实现框架(四)
- [转贴]Skin技术实现框架(五)
- [转贴]Skin技术实现框架(完)
- Skin技术实现框架
- Skin技术实现框架
- 软件SKIN技术
- 软件SKIN技术
- xss框架(二)基础框架实现
- 关于软件的SKIN技术
- 用DX8实现Skin Meshes(翻译版)
- 用DX8实现Skin Meshes(翻译版)
- 视频播放器实现技术(二)
- java代理技术二(Cglib实现)
- 用D3D实现Skin Meshes
- Subtext中的skin实现方法
- 通过Struts应用MVC设计模型
- 宁波恒隆中心WEB站点
- Microsoft Application Block for .NET - Exception
- [转贴]Skin技术实现框架(一)
- Microsoft Application Block for .NET - Cache
- [转贴]Skin技术实现框架(二)
- 软件项目心得[purecoffee]
- 关于内存释放的讨论实验
- [转贴]Skin技术实现框架(三)
- 三个月之闷:SESSION问题
- 职场生涯的3个步骤--法、儒、道家的管理哲学
- 奇怪的private类型
- 有趣的static
- 商业软件注册系统 [ASP+VB.NET]