using System.Drawing; using System.Drawing.Text; using System.Windows.Forms; using Microsoft.Drawing; namespace Microsoft.Windows.Forms { /// /// 虚拟按钮 /// public class UIButton : UIControl { private Color m_HoveredBackColor = DefaultTheme.DarkDarkTransparent; /// /// 鼠标悬停背景色 /// public virtual Color HoveredBackColor { get { return this.m_HoveredBackColor; } set { if (value != this.m_HoveredBackColor) { this.m_HoveredBackColor = value; this.Invalidate(); } } } private Color m_PressedBackColor = DefaultTheme.DarkTransparent; /// /// 鼠标按下背景色 /// public virtual Color PressedBackColor { get { return this.m_PressedBackColor; } set { if (value != this.m_PressedBackColor) { this.m_PressedBackColor = value; this.Invalidate(); } } } private Image m_Image; /// /// 图片 /// public virtual Image Image { get { return this.m_Image; } set { if (value != this.m_Image) { this.m_Image = value; this.Invalidate(); } } } private Image m_ImageHovered; /// /// 图片 /// public virtual Image ImageHovered { get { return this.m_ImageHovered; } set { if (value != this.m_ImageHovered) { this.m_ImageHovered = value; this.Invalidate(); } } } private Image m_ImagePressed; /// /// 图片 /// public virtual Image ImagePressed { get { return this.m_ImagePressed; } set { if (value != this.m_ImagePressed) { this.m_ImagePressed = value; this.Invalidate(); } } } private Image m_ImageDisabled; /// /// 图片 /// public virtual Image ImageDisabled { get { return this.m_ImageDisabled; } set { if (value != this.m_ImageDisabled) { this.m_ImageDisabled = value; this.Invalidate(); } } } private Size m_ImageSize; /// /// 图片大小 /// public virtual Size ImageSize { get { return this.m_ImageSize; } set { if (value != this.m_ImageSize) { this.m_ImageSize = value; this.Invalidate(); } } } private ContentAlignment m_ImageAlign = ContentAlignment.MiddleCenter; /// /// 图片对齐方式 /// public virtual ContentAlignment ImageAlign { get { return this.m_ImageAlign; } set { if (value != this.m_ImageAlign) { this.m_ImageAlign = value; this.Invalidate(); } } } private TextRenderingHint m_TextRenderingHint = TextRenderingHint.ClearTypeGridFit; /// /// 文本呈现质量 /// public virtual TextRenderingHint TextRenderingHint { get { return this.m_TextRenderingHint; } set { if (value != this.m_TextRenderingHint) { this.m_TextRenderingHint = value; this.Invalidate(); } } } private ContentAlignment m_TextAlign = ContentAlignment.MiddleCenter; /// /// 文本对齐方式 /// public virtual ContentAlignment TextAlign { get { return this.m_TextAlign; } set { if (value != this.m_TextAlign) { this.m_TextAlign = value; this.Invalidate(); } } } private TextImageRelation m_TextImageRelation = TextImageRelation.ImageBeforeText; /// /// 文本图片关系 /// public virtual TextImageRelation TextImageRelation { get { return this.m_TextImageRelation; } set { if (value != this.m_TextImageRelation) { this.m_TextImageRelation = value; this.Invalidate(); } } } /// /// /// /// protected override State GetState() { if (this.Enabled) { if (this.Capture) { if ((Control.MouseButtons & MouseButtons.Left) != 0)//左键按下 return State.Pressed; else return State.Hovered; } else { return State.Normal; } } else { return State.Disabled; } } /// /// 构造函数 /// public UIButton() { this.BackColor = DefaultTheme.Transparent; } /// /// 渲染控件 /// /// 数据 protected override void RenderSelf(PaintEventArgs e) { //准备 Graphics g = e.Graphics; Rectangle rect = RectangleEx.Subtract(this.ClientRectangle, this.Padding); //渲染 this.Sprite.BorderVisibleStyle = BorderVisibleStyle.None; this.Sprite.BackColor = this.BackColor; this.Sprite.BackColorHovered = this.HoveredBackColor; this.Sprite.BackColorPressed = this.PressedBackColor; this.Sprite.Image = this.Image; this.Sprite.ImageHovered = this.ImageHovered; this.Sprite.ImagePressed = this.ImagePressed; this.Sprite.ImageDisabled = this.ImageDisabled; this.Sprite.ImageSize = this.ImageSize; this.Sprite.ImageAlign = this.ImageAlign; this.Sprite.Font = this.Font; this.Sprite.ForeColor = this.ForeColor; this.Sprite.ForeColorHovered = this.ForeColor; this.Sprite.ForeColorPressed = this.ForeColor; this.Sprite.ForeColorDisabled = this.ForeColor; this.Sprite.Text = this.Text; this.Sprite.TextRenderingHint = this.TextRenderingHint; this.Sprite.TextAlign = this.TextAlign; this.Sprite.TextImageRelation = this.TextImageRelation; this.Sprite.State = this.State; this.Sprite.BeginRender(g); this.Sprite.RenderBackColor(rect); this.Sprite.RenderTextAndImage(rect); this.Sprite.EndRender(); } } }