vista风格的按钮控件

vista风格的按钮  vistabutton
下载


ContractedBlock.gif ExpandedBlockStart.gif Code
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->using System;
using System.Data;
using System.Drawing;
using System.Collections;
using System.Windows.Forms;
using System.ComponentModel;
using System.Drawing.Drawing2D;

namespace VistaButton
{
    
/// <summary>
    
/// 重写Windows系统按钮空间 A replacement for the Windows Button Control.
    
/// 技术支持 http://www.softbk.com     http://wuyisky.cnblogs.com  
    
/// wuyisky1@163.com
    
/// </summary>
    [DefaultEvent("Click")]
    
public class VistaButton : System.Windows.Forms.UserControl
    {

        
#region -  Designer  -

        
private System.ComponentModel.Container components = null;

        
/// <summary>
        
/// Initialize the component with it's
        
/// default settings.
        
/// </summary>
        public VistaButton()
        {
            InitializeComponent();

            
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            
this.SetStyle(ControlStyles.DoubleBuffer, true);
            
this.SetStyle(ControlStyles.ResizeRedraw, true);
            
this.SetStyle(ControlStyles.Selectable, true);
            
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
            
this.SetStyle(ControlStyles.UserPaint, true);
            
this.BackColor = Color.Transparent;
            mFadeIn.Interval 
= 30;
            mFadeOut.Interval 
= 30;
        }

        
/// <summary>
        
/// Release resources used by the control.
        
/// </summary>
        protected override void Dispose(bool disposing)
        {
            
if (disposing)
            {
                
if (components != null)
                {
                    components.Dispose();
                }
            }
            
base.Dispose(disposing);
        }

        
#region -  Component Designer generated code  -

        
private void InitializeComponent()
        {
            
// 
            
// VistaButton
            
// 
            this.Name = "VistaButton";
            
this.Size = new System.Drawing.Size(10032);
            
this.Paint += new System.Windows.Forms.PaintEventHandler(this.VistaButton_Paint);
            
this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.VistaButton_KeyUp);
            
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.VistaButton_KeyDown);
            
this.MouseEnter += new System.EventHandler(this.VistaButton_MouseEnter);
            
this.MouseLeave += new System.EventHandler(this.VistaButton_MouseLeave);
            
this.MouseUp += new MouseEventHandler(VistaButton_MouseUp);
            
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.VistaButton_MouseDown);
            
//this.GotFocus += new EventHandler(VistaButton_MouseEnter);
            
//this.LostFocus += new EventHandler(VistaButton_MouseLeave);
            this.mFadeIn.Tick += new EventHandler(mFadeIn_Tick);
            
this.mFadeOut.Tick += new EventHandler(mFadeOut_Tick);
            
this.Resize += new EventHandler(VistaButton_Resize);
        }

        
#endregion

        
#endregion

        
#region -  Enums  -

        
/// <summary>
        
/// A private enumeration that determines 
        
/// the mouse state in relation to the 
        
/// current instance of the control.
        
/// </summary>
        enum State { None, Hover, Pressed };

        
/// <summary>
        
/// A public enumeration that determines whether
        
/// the button background is painted when the 
        
/// mouse is not inside the ClientArea.
        
/// </summary>
        public enum Style
        {
            
/// <summary>
            
/// Draw the button as normal
            
/// </summary>
            Default,
            
/// <summary>
            
/// Only draw the background on mouse over.
            
/// </summary>
            Flat
        };

        
#endregion

        
#region -  Properties  -

        
#region -  Private Variables  -

        
private bool calledbykey = false;
        
private State mButtonState = State.None;
        
private Timer mFadeIn = new Timer();
        
private Timer mFadeOut = new Timer();
        
private int mGlowAlpha = 0;

        
#endregion

        
#region -  Text  -

        
private string mText;
        
/// <summary>
        
/// The text that is displayed on the button.
        
/// </summary>
        [Category("Text"),
         Description(
"The text that is displayed on the button.")]
        
public string ButtonText
        {
            
get { return mText; }
            
set { mText = value; this.Invalidate(); }
        }

        
private Color mForeColor = Color.White;
        
/// <summary>
        
/// The color with which the text is drawn.
        
/// </summary>
        [Category("Text"),
         Browsable(
true),
         DefaultValue(
typeof(Color), "White"),
         Description(
"The color with which the text is drawn.")]
        
public override Color ForeColor
        {
            
get { return mForeColor; }
            
set { mForeColor = value; this.Invalidate(); }
        }

        
private ContentAlignment mTextAlign = ContentAlignment.MiddleCenter;
        
/// <summary>
        
/// The alignment of the button text
        
/// that is displayed on the control.
        
/// </summary>
        [Category("Text"),
         DefaultValue(
typeof(ContentAlignment), "MiddleCenter"),
         Description(
"The alignment of the button text " +
                     
"that is displayed on the control.")]
        
public ContentAlignment TextAlign
        {
            
get { return mTextAlign; }
            
set { mTextAlign = value; this.Invalidate(); }
        }

        
#endregion

        
#region -  Image  -

        
private Image mImage;
        
/// <summary>
        
/// The image displayed on the button that 
        
/// is used to help the user identify
        
/// it's function if the text is ambiguous.
        
/// </summary>
        [Category("Image"),
         DefaultValue(
null),
         Description(
"The image displayed on the button that " +
                     
"is used to help the user identify" +
                     
"it's function if the text is ambiguous.")]
        
public Image Image
        {
            
get { return mImage; }
            
set { mImage = value; this.Invalidate(); }
        }

        
private ContentAlignment mImageAlign = ContentAlignment.MiddleLeft;
        
/// <summary>
        
/// The alignment of the image 
        
/// in relation to the button.
        
/// </summary>
        [Category("Image"),
         DefaultValue(
typeof(ContentAlignment), "MiddleLeft"),
         Description(
"The alignment of the image " +
                     
"in relation to the button.")]
        
public ContentAlignment ImageAlign
        {
            
get { return mImageAlign; }
            
set { mImageAlign = value; this.Invalidate(); }
        }

        
private Size mImageSize = new Size(2424);
        
/// <summary>
        
/// The size of the image to be displayed on the
        
/// button. This property defaults to 24x24.
        
/// </summary>
        [Category("Image"),
         DefaultValue(
typeof(Size), "24, 24"),
         Description(
"The size of the image to be displayed on the" +
                     
"button. This property defaults to 24x24.")]
        
public Size ImageSize
        {
            
get { return mImageSize; }
            
set { mImageSize = value; this.Invalidate(); }
        }

        
#endregion

        
#region -  Appearance  -

        
private Style mButtonStyle = Style.Default;
        
/// <summary>
        
/// Sets whether the button background is drawn 
        
/// while the mouse is outside of the client area.
        
/// </summary>
        [Category("Appearance"),
         DefaultValue(
typeof(Style), "Default"),
         Description(
"Sets whether the button background is drawn " +
                     
"while the mouse is outside of the client area.")]
        
public Style ButtonStyle
        {
            
get { return mButtonStyle; }
            
set { mButtonStyle = value; this.Invalidate(); }
        }

        
private int mCornerRadius = 8;
        
/// <summary>
        
/// The radius for the button corners. The 
        
/// greater this value is, the more 'smooth' 
        
/// the corners are. This property should
        
///  not be greater than half of the 
        
///  controls height.
        
/// </summary>
        [Category("Appearance"),
         DefaultValue(
8),
         Description(
"The radius for the button corners. The " +
                     
"greater this value is, the more 'smooth' " +
                     
"the corners are. This property should " +
                     
"not be greater than half of the " +
                     
"controls height.")]
        
public int CornerRadius
        {
            
get { return mCornerRadius; }
            
set { mCornerRadius = value; this.Invalidate(); }
        }

        
private Color mHighlightColor = Color.White;
        
/// <summary>
        
/// The colour of the highlight on the top of the button.
        
/// </summary>
        [Category("Appearance"),
         DefaultValue(
typeof(Color), "White"),
         Description(
"The colour of the highlight on the top of the button.")]
        
public Color HighlightColor
        {
            
get { return mHighlightColor; }
            
set { mHighlightColor = value; this.Invalidate(); }
        }

        
private Color mButtonColor = Color.Black;
        
/// <summary>
        
/// The bottom color of the button that 
        
/// will be drawn over the base color.
        
/// </summary>
        [Category("Appearance"),
         DefaultValue(
typeof(Color), "Black"),
         Description(
"The bottom color of the button that " +
                     
"will be drawn over the base color.")]
        
public Color ButtonColor
        {
            
get { return mButtonColor; }
            
set { mButtonColor = value; this.Invalidate(); }
        }

        
private Color mGlowColor = Color.FromArgb(141189255);
        
/// <summary>
        
/// The colour that the button glows when
        
/// the mouse is inside the client area.
        
/// </summary>
        [Category("Appearance"),
         DefaultValue(
typeof(Color), "141,189,255"),
         Description(
"The colour that the button glows when " +
                     
"the mouse is inside the client area.")]
        
public Color GlowColor
        {
            
get { return mGlowColor; }
            
set { mGlowColor = value; this.Invalidate(); }
        }

        
private Image mBackImage;
        
/// <summary>
        
/// The background image for the button, 
        
/// this image is drawn over the base 
        
/// color of the button.
        
/// </summary>
        [Category("Appearance"),
         DefaultValue(
null),
         Description(
"The background image for the button, " +
                     
"this image is drawn over the base " +
                     
"color of the button.")]
        
public Image BackImage
        {
            
get { return mBackImage; }
            
set { mBackImage = value; this.Invalidate(); }
        }

        
private Color mBaseColor = Color.Black;
        
/// <summary>
        
/// The backing color that the rest of 
        
/// the button is drawn. For a glassier 
        
/// effect set this property to Transparent.
        
/// </summary>
        [Category("Appearance"),
         DefaultValue(
typeof(Color), "Black"),
         Description(
"The backing color that the rest of" +
                     
"the button is drawn. For a glassier " +
                     
"effect set this property to Transparent.")]
        
public Color BaseColor
        {
            
get { return mBaseColor; }
            
set { mBaseColor = value; this.Invalidate(); }
        }

        
#endregion

        
#endregion

        
#region -  Functions  -

        
private GraphicsPath RoundRect(RectangleF r, float r1, float r2, float r3, float r4)
        {
            
float x = r.X, y = r.Y, w = r.Width, h = r.Height;
            GraphicsPath rr 
= new GraphicsPath();
            rr.AddBezier(x, y 
+ r1, x, y, x + r1, y, x + r1, y);
            rr.AddLine(x 
+ r1, y, x + w - r2, y);
            rr.AddBezier(x 
+ w - r2, y, x + w, y, x + w, y + r2, x + w, y + r2);
            rr.AddLine(x 
+ w, y + r2, x + w, y + h - r3);
            rr.AddBezier(x 
+ w, y + h - r3, x + w, y + h, x + w - r3, y + h, x + w - r3, y + h);
            rr.AddLine(x 
+ w - r3, y + h, x + r4, y + h);
            rr.AddBezier(x 
+ r4, y + h, x, y + h, x, y + h - r4, x, y + h - r4);
            rr.AddLine(x, y 
+ h - r4, x, y + r1);
            
return rr;
        }



        
#endregion

        
#region -  Drawing  -

        
/// <summary>
        
/// Draws the outer border for the control
        
/// using the ButtonColor property.
        
/// </summary>
        
/// <param name="g">The graphics object used in the paint event.</param>
        private void DrawOuterStroke(Graphics g)
        {
            
if (this.ButtonStyle == Style.Flat && this.mButtonState == State.None) { return; }
            Rectangle r 
= this.ClientRectangle;
            r.Width 
-= 1; r.Height -= 1;
            
using (GraphicsPath rr = RoundRect(r, CornerRadius, CornerRadius, CornerRadius, CornerRadius))
            {
                
using (Pen p = new Pen(this.ButtonColor))
                {
                    g.DrawPath(p, rr);
                }
            }
        }

        
/// <summary>
        
/// Draws the inner border for the control
        
/// using the HighlightColor property.
        
/// </summary>
        
/// <param name="g">
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值