using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using TestProject.Properties; using System.Drawing.Text; using System.Drawing.Drawing2D; namespace TestProject { public partial class QQButton : Button { private EMouseEnum _mouseState = EMouseEnum.Normal; private bool _isShowBorder = true; private TextFormatFlags _textAlign = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter; public QQButton() { InitializeComponent(); } internal EMouseEnum MouseState { get { return this._mouseState; } set { this._mouseState = value; base.Invalidate(); } } /// /// 整个按钮的区域 /// internal Rectangle AllRect { get { return new Rectangle(0, 0, this.Width, this.Height); } } /// /// 是否显示发光边框 /// [Description("是否显示发光边框")] public virtual bool IsShowBorder { get { return this._isShowBorder; } set { this._isShowBorder = value; } } /// /// 文字区域 /// internal Rectangle TextRect { get { return new Rectangle(2, 2, this.AllRect.Width - 4, this.AllRect.Height - 4); } } /// /// 按钮上文字的对齐方式 /// [Description("按钮上文字的对齐方式")] new public ContentAlignment TextAlign { get { return base.TextAlign; } set { base.TextAlign = value; switch (base.TextAlign) { case ContentAlignment.BottomCenter: this._textAlign = TextFormatFlags.Bottom | TextFormatFlags.HorizontalCenter | TextFormatFlags.SingleLine; break; case ContentAlignment.BottomLeft: this._textAlign = TextFormatFlags.Bottom | TextFormatFlags.Left | TextFormatFlags.SingleLine; break; case ContentAlignment.BottomRight: this._textAlign = TextFormatFlags.Bottom | TextFormatFlags.Right | TextFormatFlags.SingleLine; break; case ContentAlignment.MiddleCenter: this._textAlign = TextFormatFlags.SingleLine | TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter; break; case ContentAlignment.MiddleLeft: this._textAlign = TextFormatFlags.Left | TextFormatFlags.VerticalCenter | TextFormatFlags.SingleLine; break; case ContentAlignment.MiddleRight: this._textAlign = TextFormatFlags.Right | TextFormatFlags.VerticalCenter | TextFormatFlags.SingleLine; break; case ContentAlignment.TopCenter: this._textAlign = TextFormatFlags.Top | TextFormatFlags.HorizontalCenter | TextFormatFlags.SingleLine; break; case ContentAlignment.TopLeft: this._textAlign = TextFormatFlags.Top | TextFormatFlags.Left | TextFormatFlags.SingleLine; break; case ContentAlignment.TopRight: this._textAlign = TextFormatFlags.Top | TextFormatFlags.Right | TextFormatFlags.SingleLine; break; } base.Invalidate(this.TextRect); } } protected override void OnPaint(PaintEventArgs pevent) { Graphics g = pevent.Graphics; g.SmoothingMode = SmoothingMode.AntiAlias; g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; switch (MouseState) { case EMouseEnum.Leave: case EMouseEnum.Normal: if (base.Focused) { if (this.IsShowBorder) { using (Image focus = Resources.focus) { DrawHelper.RendererBackground(g, this.TextRect, focus, true); } } else { DrawHelper.RendererBackground(g, this.TextRect, Resources.normal, true); } } else { DrawHelper.RendererBackground(g, this.TextRect, Resources.normal, true); } break; case EMouseEnum.Up: case EMouseEnum.Move: DrawHelper.RendererBackground(g, this.TextRect, Resources.highlight, true); break; case EMouseEnum.Down: DrawHelper.RendererBackground(g, this.TextRect, Resources.Light, true); break; } TextRenderer.DrawText(g, this.Text, this.Font, this.TextRect, this.ForeColor, this._textAlign); } /// /// 引发 System.Windows.Forms.Form.MouseEnter 事件。 /// /// 包含事件数据的 System.EventArgs。 protected override void OnMouseEnter(EventArgs e) { base.OnMouseEnter(e); this.MouseState = EMouseEnum.Move; } /// /// 引发 System.Windows.Forms.Form.MouseLeave 事件。 /// /// 包含事件数据的 System.EventArgs。 protected override void OnMouseLeave(EventArgs e) { base.OnMouseLeave(e); this.MouseState = EMouseEnum.Leave; } /// /// 引发 System.Windows.Forms.Form.MouseDown 事件。 /// /// 包含事件数据的 System.Windows.Forms.MouseEventArgs。 protected override void OnMouseDown(MouseEventArgs mevent) { base.OnMouseDown(mevent); this.MouseState = EMouseEnum.Down; } /// /// 引发 System.Windows.Forms.Form.MouseUp 事件。 /// /// 包含事件数据的 System.Windows.Forms.MouseEventArgs。 protected override void OnMouseUp(MouseEventArgs mevent) { base.OnMouseUp(mevent); this.MouseState = EMouseEnum.Up; } } }