C#仿QQ皮肤-实现原理系列文章导航
http://www.cnblogs.com/sufei/archive/2010/03/10/1682847.html
大家都知道WinForm的文本框的边框颜色是不能修改的,在这里咱们就看一下怎么样使用Aip的方法来实现修改边框的效果。
不但可以修改文本框的,任何基本控件都行,包括Windows窗体在内。一会儿大家可以参考一个我的公共方法。
我们先来看看实现后的效果吧
正常显示时效果
在得到焦点时的效果
大可以应该可以看得出来有什么不同,第一个图上是增加一个边框,颜色很谈的一条线,在得到焦点时会改变文本框的背景色,当然在失去焦点时会还原过来
这些效果都是可以自己修改的,我给出来的只是一个样子,比较得到焦点时的颜色可以自己修改,正常显示时的边框都可以自己修改。
来看看实现方式吧
先来看看是怎么实现边框的吧第一步我们来新建一个TextBox组件类
然后我们来实现一个边框
我们先来设置一些东西看构造方法
: base ()
{
// 设置为单行边框
this .BorderStyle = BorderStyle.FixedSingle;
// 强制将分配的样式应用到控件
this .UpdateStyles();
// 得到默认颜色关储存
objcolor = BackColor;
}
我之所以这样设置是为了下一步修改边框,保存默认颜色我不说大家也知道是为了什么吧。当然是在失去焦点时还原本来的颜色啦。
我们一起来看一下调用的代码吧
/// 重新设置边框
/// </summary>
/// <param name="m"> 当前的Windows消息 </param>
protected override void WndProc( ref Message m)
{
base .WndProc( ref m);
if (m.Msg == 0xf || m.Msg == 0x133 )
{
SkinHelp.ResetBorderColor(m, this , 1 , SkinHelp.ControlBorderBackColor);
}
}
我们只要重写一个WndProc这个方法就OK了,其实这里很简单。调用 一个父类的方法,然后判断消息的正确性,然后调用下面一个方法就可以了,我们主要一起来看一下ResetBorderColor方法吧
先看看方法的签名吧
/// 修改控件或窗体的边框,例如