Winform换肤原理

来源:互联网 发布:手机如何开通淘宝网店 编辑:程序博客网 时间:2024/04/29 18:51

  前两天跟着做村级节水系统,在其中遇到了换肤功能的实现。所以,想具体了解一下换肤原理。

        跟踪代码,Winform换肤的实现主要是读取换肤的配置文件,然后重绘所有所有窗体以及窗体中的所有控件,大致回应WM_PAINT和WM_NCPAINT。

        从网上获取大量资料,发现做这部分内容,需要掌握两个技术点:其一是GDI+(图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出),其二是API(Windows API是一套用来控制Windows的各个部件的外观和行为的一套预先定义的Windows函数)。

        根据不同的对象,换肤可以分为窗体换肤和控件换肤。无论是哪种换肤,它们实现的基本原理都是通过拦截Windows消息,绘制自己想要的效果,再用自己绘制的把系统的覆盖掉。

        1. 控件内部滚动条的实现原理

        滚动条换肤的难点在于无论怎么拦截Windows消息,都无法阻止系统去勾绘滚动条。若要系统不对其进行绘制,一定要接管滚动条消息的管制和描绘,Windows给出了有关滚动条的API:

       GetScrollInfo——该函数获取滚动条的参数:滚动条位置的最值,页面大小,滚动按钮的位置

       SetScrollInfo——该函数设置滚动条的参数:滚动条位置的最值,页面大小,滚动按钮的位置

       在处理的过程中,需要处理几个方法,包括Value值、鼠标事件和MoveThumb方法。

       2. 菜单的实现原理

       首先,获取菜单句柄。给菜单窗口发送MN_GETHMENU这个信息就可以获取了

       其次,窗口标题栏。题目栏在元素转变时,系统会自动绘制的。如果把标题栏格调WS_CAPTION去掉,会造成许多项目失效。

 

       说明:消息,就是指Windows发出的一个通知,告诉我们应用程序的某个事情发生了,如:单击鼠标、改变窗口尺寸等。消息本身作为一个记录传递给应用程序,这个记录中包含了消息的类型以及其他信息。



原文地址:http://blog.csdn.net/daidailiuhome/article/details/6885549

0 0