using System; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Text; using System.Windows.Forms; using UAS_MES_NEW.Enum; using UAS_MES_NEW.Properties; using UAS_MES_NEW.PublicMethod; namespace UAS_MES_NEW.CustomControl.ButtonUtil { public partial class NormalButton : Button { #region 变量 /// /// 鼠标状态 /// private EMouseState _mouseState = EMouseState.Normal; /// /// 文本对齐方式 /// private TextFormatFlags _textAlign = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter; /// /// 默认时的按钮图片 /// private Image _normalImage = null; /// /// 鼠标按下时的图片 /// private Image _downImage = null; /// /// 鼠标划过时的图片 /// private Image _moveImage = null; /// /// 是否按下了鼠标 /// private bool _isShowBorder = true; /// /// 权限标识符 /// string Power1; public string Power { get { return Power1; } set { Power1 = value; } } string AllPower1; public string AllPower { get { return AllPower1; } set { AllPower1 = value; } } #endregion #region 构造函数 public NormalButton() { InitializeComponent(); this.SetStyle( ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.Selectable | ControlStyles.DoubleBuffer | ControlStyles.SupportsTransparentBackColor | ControlStyles.UserPaint, true); this.SetStyle(ControlStyles.Opaque, false); base.BackColor = Color.Transparent; this.UpdateStyles(); } #endregion #region 属性 /// /// 默认大小 /// protected override Size DefaultSize { get { return new Size(75, 28); } } /// /// 默认图片 /// [Description("默认图片")] public virtual Image NormalImage { get { if (this._normalImage == null) this._normalImage = Resources.normal; return this._normalImage; } set { this._normalImage = value; base.Invalidate(); } } /// /// 鼠标按下时的图片 /// [Description("鼠标按下时的图片")] public virtual Image DownImage { get { if (this._downImage == null) this._downImage = Resources.down; return this._downImage; } set { this._downImage = value; base.Invalidate(); } } /// /// 鼠标划过时的图片 /// [Description("鼠标划过时的图片")] public virtual Image MoveImage { get { if (this._moveImage == null) this._moveImage = Resources.highlight; return this._moveImage; } set { this._moveImage = value; base.Invalidate(); } } /// /// 是否显示发光边框 /// [Description("是否显示发光边框")] public virtual bool IsShowBorder { get { return this._isShowBorder; } set { this._isShowBorder = value; } } /// /// 与控件相关的文本 /// [DefaultValue("QQButton")] public override string Text { get { return base.Text; } set { base.Text = value; base.Invalidate(this.TextRect); } } /// /// 按钮上显示的图片 /// [Description("按钮上显示的图片")] public virtual new Image Image { get { return base.Image; } set { base.Image = value; base.Invalidate(); } } /// /// 按钮上文字的对齐方式 /// [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); } } /// /// 整个按钮的区域 /// internal Rectangle AllRect { get { return new Rectangle(0, 0, this.Width, this.Height); } } /// /// 文字区域 /// internal Rectangle TextRect { get { return new Rectangle(2, 2, this.AllRect.Width - 4, this.AllRect.Height - 4); } } /// /// 鼠标状态 /// internal EMouseState MouseState { get { return this._mouseState; } set { this._mouseState = value; base.Invalidate(); } } #endregion #region Override 方法 /// /// 引发 System.Windows.Forms.Form.Paint 事件。 /// /// 包含事件数据的 System.Windows.Forms.PaintEventArgs。 protected override void OnPaint(PaintEventArgs pevent) { Graphics g = pevent.Graphics; g.SmoothingMode = SmoothingMode.AntiAlias; g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; //g.DrawImage(AssemblyHelper.GetAssemblyImage("Button.all_btn_White-side.png"), this.AllRect); if (base.Enabled) { if (this.IsShowBorder) { if (this.Focused)//得到焦点的时候,绘制边框 { using (Image light = Resources.Light) { //g.DrawImage(light, this.AllRect); //DrawHelper.RendererBackground(g, this.AllRect, light, true); } } } switch (this.MouseState) { case EMouseState.Leave: DrawHelper.RendererBackground(g, this.TextRect, this.NormalImage, true); break; case EMouseState.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, this.NormalImage, true); } } else { DrawHelper.RendererBackground(g, this.TextRect, this.NormalImage, true); } break; case EMouseState.Up: case EMouseState.Move: DrawHelper.RendererBackground(g, this.TextRect, this.MoveImage, true); break; case EMouseState.Down: DrawHelper.RendererBackground(g, this.TextRect, this.DownImage, true); break; } //if (this.Image != null) //{ //int y = (this.Height - this.Image.Height) / 2; //int x = 10; //if (!string.IsNullOrEmpty(this.Text)) // x = (this.AllRect.Width - (TextHelper.GetStringLen(this.Text) * 6 + this.Image.Width)) / 2; //else // x = (this.Width - this.Image.Width) / 2;//将图片绘制在按钮居中位置 //Rectangle rect = new Rectangle(x, y, this.Image.Width, this.Image.Height); //Rectangle imgRect = new Rectangle(0, 0, this.Image.Width, this.Image.Height); ////绘制图片 //g.DrawImage(this.Image, rect, imgRect, GraphicsUnit.Pixel); ////绘制文字 //Rectangle textRect = new Rectangle(this.TextRect.X + this.Image.Width, this.TextRect.Y, this.TextRect.Width, this.TextRect.Height); //TextRenderer.DrawText(g, this.Text, this.Font, textRect, this.ForeColor, _textAlign); //} //else //{ //绘制按钮上的文字 TextRenderer.DrawText(g, this.Text, this.Font, this.TextRect, this.ForeColor, this._textAlign); //} } else { using (Image gray = Resources.gray) { DrawHelper.RendererBackground(g, this.TextRect, gray, true); } TextRenderer.DrawText(g, this.Text, this.Font, this.TextRect, Color.Gray, this._textAlign); } } /// /// 引发 System.Windows.Forms.Form.MouseEnter 事件。 /// /// 包含事件数据的 System.EventArgs。 protected override void OnMouseEnter(EventArgs e) { base.OnMouseEnter(e); this.MouseState = EMouseState.Move; } /// /// 引发 System.Windows.Forms.Form.MouseLeave 事件。 /// /// 包含事件数据的 System.EventArgs。 protected override void OnMouseLeave(EventArgs e) { base.OnMouseLeave(e); this.MouseState = EMouseState.Leave; } /// /// 引发 System.Windows.Forms.Form.MouseDown 事件。 /// /// 包含事件数据的 System.Windows.Forms.MouseEventArgs。 protected override void OnMouseDown(MouseEventArgs mevent) { base.OnMouseDown(mevent); this.MouseState = EMouseState.Down; } /// /// 引发 System.Windows.Forms.Form.MouseUp 事件。 /// /// 包含事件数据的 System.Windows.Forms.MouseEventArgs。 protected override void OnMouseUp(MouseEventArgs mevent) { base.OnMouseUp(mevent); this.MouseState = EMouseState.Up; } #endregion } }