C# 高仿腾讯QQ (CheckBox控件美化)
接上一篇《C# 高仿腾讯QQ (TextBox控件美化) 》
这篇来说一下QQ皮肤CheckBox控件的美化:
图
看过上几篇的,这个理解应该很简单,没有太多时间,就不多说了,直接贴源
代码
//作者:阿龙(Along)
//QQ号:646494711
//QQ群:57218890
//网站:http://www.8timer.com
//博客:http://www.cnblogs.com/Along729/
//声明:未经作者许可,任何人不得发布出售该源码,请尊重别人的劳动成果,谢谢大家支持
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
using AlSkin.AlClass;
using System.ComponentModel;
namespace AlSkin.AlControl.AlCheckBox
{
[ToolboxBitmap(typeof(System.Windows.Forms.CheckBox))]
public class AlCheckBox : CheckBox
{
#region 声明
private State state = State.Normal;
private Bitmap _BackImg = ImageObject.GetResBitmap("AlSkin.AlSkinImg.AlCheckBoxImg.Checkbox.png");
//枚鼠标状态
private enum State
{
Normal = 1,
MouseOver = 2,
MouseDown = 3,
Disable = 4
}
#endregion
#region 构造函数
public AlCheckBox()
{
this.SetStyle(ControlStyles.UserPaint, true);//设置控件自行绘制
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);//背景透明
this.SetStyle(ControlStyles.StandardDoubleClick, false);
this.BackColor = System.Drawing.Color.Transparent;//背景设为透明
}
#endregion
#region 属性
[CategoryAttribute("阿龙自定义属性"), Description("CheckBox图片")]
public Bitmap BackImg
{
get { return this._BackImg; }
set
{
_BackImg = value;
this.Invalidate();
}
}
#endregion
#region 方法
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
base.OnPaint(e);
base.OnPaintBackground(e);
if (_BackImg == null)
{
base.OnPaint(e);
return;
}
int i = (int)state;
if (!this.Enabled) i = 4;
if (this.CheckState == CheckState.Checked) i += 4;
if (this.CheckState == CheckState.Indeterminate) i += 8;
Rectangle rc = this.ClientRectangle;
Rectangle r1 = rc;
Rectangle textRect;
Graphics g = e.Graphics;
if (this.CheckAlign == ContentAlignment.MiddleLeft)//对齐状态
{
r1 = new Rectangle(0, (rc.Height - 15) / 2, 16, 15);
textRect = new Rectangle(16, 0, rc.Width - 16, rc.Height);
}
else
{
r1 = new Rectangle(r1.Right - 16, (rc.Height - 16) / 2, 16, 15);
textRect = new Rectangle(0, 0, rc.Width - 16, rc.Height);
}
ImageDrawRect.DrawRect(g, _BackImg, r1, Rectangle.FromLTRB(0, 0, 0, 0), i, 12);
Color textColor = Enabled ? ForeColor : SystemColors.GrayText;
TextRenderer.DrawText(e.Graphics, this.Text, this.Font, textRect, textColor);
}
protected override void OnMouseEnter(EventArgs e)
{
state = State.MouseOver;
this.Invalidate();
base.OnMouseEnter(e);
}
protected override void OnMouseLeave(EventArgs e)
{
state = State.Normal;
this.Invalidate();
base.OnMouseLeave(e);
}
protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
{
if ((e.Button & MouseButtons.Left) != MouseButtons.Left) return;
state = State.MouseOver;
this.Invalidate();
base.OnMouseDown(e);
}
protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs e)
{
if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
state = State.MouseOver;
this.Invalidate();
base.OnMouseUp(e);
}
#endregion
}
}
由于我的空间经常出问题,以后所有的源文件都放在57218890群共享里面,大家自己去下
还有,RadioButton 美化差不多,大家自己去试试
作者:Along(阿龙)
网站:http://www.8timer.com
出处:http://www.cnblogs.com/Along729/
关于作者:专注于项目架构、WINFORM开发、WEB开发。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,在文章页面位置给出原文连接,如有问题,可以通过bpd729@163.com 联系我,非常感谢。
网站:http://www.8timer.com
出处:http://www.cnblogs.com/Along729/
关于作者:专注于项目架构、WINFORM开发、WEB开发。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,在文章页面位置给出原文连接,如有问题,可以通过bpd729@163.com 联系我,非常感谢。