实例介绍
【实例截图】
【核心代码】
/* ================================== * Author :Coder.Yan * CreateTime:2012/8/30 21:54:45 * Copyright :CY©2012 * ==================================*/ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Drawing; using System.ComponentModel; namespace CYControls { /// <summary> /// 提供透明和旋转功能的基础控件 /// </summary> public class CYBaseControl : Control { private float _iBorderThickness = 1f; private float _iOpacity = 1f; private Brush _brushBg = null; private Pen _penFg = null; public CYBaseControl() { this.SetStyle(ControlStyles.SupportsTransparentBackColor | ControlStyles.Opaque, true); this.BackColor = Color.Transparent; BackgroundBrush = Brushes.Transparent; ForegroundPen = Pens.Black; } #region Propertys #region HideParent [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] public override string Text { get { return base.Text; } set { base.Text = value; } } [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] public override Image BackgroundImage { get { return base.BackgroundImage; } set { base.BackgroundImage = value; } } [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] public override ImageLayout BackgroundImageLayout { get { return base.BackgroundImageLayout; } set { base.BackgroundImageLayout = value; } } #endregion public override Color BackColor { get { return base.BackColor; } set { base.BackColor = value; ResetBgBrush(); } } //[EditorAttribute(typeof(BrushTypeEditor), typeof(System.Drawing.Design.UITypeEditor))] //public double Background //{ // get; // set; //} public override Color ForeColor { get { return base.ForeColor; } set { base.ForeColor = value; ResetFgPen(); } } public float BorderThickness { get { return _iBorderThickness; } set { if (value < 0) { throw new Exception("Out off range"); } _iBorderThickness = value; ResetFgPen(); ResetDrawRect(); } } public virtual float RotateAngle { get; set; } public float Opacity { get { return _iOpacity; } set { if (value > 1 || value < 0) { throw new Exception("Out of range,the Value be in [0,1]"); } else { _iOpacity = value; ResetBrushes(); } } } protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle = 0x20; return cp; } } protected virtual Brush BackgroundBrush { get { return _brushBg; } set { _brushBg = value; } } protected virtual Pen ForegroundPen { get { return _penFg; } set { _penFg = value; } } protected virtual RectangleF DrawRect { get; set; } #endregion #region Methods protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; } protected override void OnSizeChanged(EventArgs e) { base.OnSizeChanged(e); ResetDrawRect(); } protected override void OnPaddingChanged(EventArgs e) { base.OnPaddingChanged(e); ResetDrawRect(); } protected void ResetBrushes() { ResetBgBrush(); ResetFgPen(); } protected void ResetBgBrush() { BackgroundBrush = new SolidBrush(GetOpacityColor(BackColor, Opacity)); } protected void ResetFgPen() { ForegroundPen = new Pen(GetOpacityColor(ForeColor, Opacity), BorderThickness); } protected Color GetOpacityColor(Color baseColor, float op) { return Color.FromArgb(Convert.ToInt32(op * baseColor.A), baseColor); } private void ResetDrawRect() { float dbwidth = 2 * BorderThickness; float halfwidth = BorderThickness / 2; int paddingWhith = Padding.Left Padding.Right; int paddingHeight = Padding.Top Padding.Bottom; if (dbwidth > Width - paddingWhith || dbwidth > Height - paddingHeight) { DrawRect = this.Bounds; } else { DrawRect = new RectangleF(Padding.Left halfwidth, Padding.Top halfwidth, Width - BorderThickness - paddingWhith, Height - BorderThickness - paddingHeight); } } #endregion } }
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论