日期:2014-05-20  浏览次数:20941 次

(winform)基于net2.0/4.0写的小工具《桌控1.3》 论皮肤控件的制作 抛砖引玉 欢迎讨论
先AD下桌控:
--------------------
  v1.3 更新 网站及下载:http://www.370b.com/
--------------------
1.引入皮肤概念,界面颜色随你调,百变桌控随你搭;
  1.一键换肤
  2.界面微调
2.设置添加》搜索后是否清除搜索框关键词;
3.反馈意见接口优化;
4.已知BUG修正.


--------------------
  我的换肤的思路(不想用网上的别人开发的控件,自己瞎写 欢迎交流)
--------------------
1. 颜色统一在一个类里
2. 自定义继承控件 重载 OnPaintBackground 或 OnPaint 重绘的颜色从1中取
3. 界面.Refresh (这里双缓冲很重要 重载控件 最好设置双缓冲,以及窗体双缓冲)

比如 label,不想重绘文字 简单的处理,鼠标悬停变色:
VB.NET code

Friend Class MyZKSkinLinkLabel
    Inherits Label
Private ishover As Boolean
Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
        If ishover Then
            MyBase.ForeColor = MySkinHelper.Current.LinkHoverColor
        Else
            MyBase.ForeColor = MySkinHelper.Current.LinkColor
        End If
        MyBase.OnPaint(e)
    End Sub
    Protected Overrides Sub OnMouseEnter(e As System.EventArgs)
        ishover = True
        MyBase.ForeColor = MySkinHelper.Current.LinkHoverColor
    End Sub
    Protected Overrides Sub OnMouseLeave(e As System.EventArgs)
        ishover = False
        MyBase.ForeColor = MySkinHelper.Current.LinkColor
    End Sub
End Class


C# code
internal class MyZKSkinLinkLabel : Label
{
    private bool ishover;
    protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
    {
        if (ishover) {
            base.ForeColor = MySkinHelper.Current.LinkHoverColor;
        } else {
            base.ForeColor = MySkinHelper.Current.LinkColor;
        }
        base.OnPaint(e);
    }
    protected override void OnMouseEnter(System.EventArgs e)
    {
        ishover = true;
        base.ForeColor = MySkinHelper.Current.LinkHoverColor;
    }
    protected override void OnMouseLeave(System.EventArgs e)
    {
        ishover = false;
        base.ForeColor = MySkinHelper.Current.LinkColor;
    }
}


其他重绘原理如上 


--------------------
  桌控界面一览:
--------------------

主界面1:


主界面2:


一键换肤界面:


一键换肤效果:













------解决方案--------------------
开源了吗?
怎么发非技术区了?
发到技术区
又一个加精帖了



------解决方案--------------------
配色还行,至少让人看上去是学过一点的。

学过的和没学过的是不一样的。
------解决方案--------------------
能把自己学习到得东西分享给大家是最可贵的。

不像有些人天天打架
------解决方案--------------------

------解决方案--------------------

挺好的
------解决方案--------------------
不错的
------解决方案--------------------
GOOD
------解决方案--------------------
帮顶!
------解决方案--------------------
探讨
挺好的

------解决方案--------------------
好东西啊
------解决方案--------------------