C#中水晶按钮的程序生成 版权所有 codesky.net 2003-2005 发表时间:2005-1-26 关键字:未知
做了一个控件,这样就可以告别图片按钮了:)
程序源代码:
using System; using System.Collections; using System.ComponentModel; using System.Drawing; using System.Data; using System.Windows.Forms; using System.Drawing.Drawing2D; using System.Drawing.Text;
namespace WindowsControlLibrary1 { /// <summary> /// UserControl1 的摘要说明。 /// </summary> public class UserControl1 : Button { /// <summary> /// 必需的设计器变量。 /// </summary> private System.ComponentModel.Container components = null; private bool XiaCen=false; private bool mouseMove=false; private Color backColor; public UserControl1() { // 该调用是 Windows.Forms 窗体设计器所必需的。 InitializeComponent();
// TODO: 在 InitComponent 调用后添加任何初始化 backColor=this.backColor; //this.Text=this.ShowFocusCues.ToString(); }
/// <summary> /// 清理所有正在使用的资源。 /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if( components != null ) components.Dispose(); } base.Dispose( disposing ); }
#region 组件设计器生成的代码 /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器 /// 修改此方法的内容。 /// </summary> private void InitializeComponent() { // // UserControl1 // this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.UserControl1_MouseUp); this.Paint += new System.Windows.Forms.PaintEventHandler(this.UserControl1_Paint); this.MouseEnter += new System.EventHandler(this.UserControl1_MouseEnter); this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.UserControl1_KeyUp); this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.UserControl1_KeyDown); this.BackColorChanged += new System.EventHandler(this.UserControl1_BackColorChanged); this.MouseLeave += new System.EventHandler(this.UserControl1_MouseLeave); this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.UserControl1_MouseDown);
} #endregion
protected GraphicsPath GetGraphicsPath(Rectangle rect) { GraphicsPath ClientPath = new System.Drawing.Drawing2D.GraphicsPath(); if(rect.Width<=0) { rect.Width=1; } if(rect.Height<=0) { rect.Height=1; } ClientPath.AddArc(rect.Left,rect.Top,rect.Height,rect.Height,90f,180f); ClientPath.AddArc(rect.Right-rect.Height,rect.Top,rect.Height,rect.Height,270f,180f); ClientPath.CloseFigure(); return ClientPath; } protected GraphicsPath GetGraphicsPath1(Rectangle rect) { GraphicsPath ClientPath = new System.Drawing.Drawing2D.GraphicsPath(); if(rect.Width<=0) { rect.Width=1; } if(rect.Height<=0) { rect.Height=1; } ClientPath.AddArc(rect.Left,rect.Top,rect.Height,rect.Height,190f,80f); ClientPath.AddArc(rect.Right-rect.Height,rect.Top,rect.Height,rect.Height,270f,80f); ClientPath.CloseFigure(); return ClientPath; } private void DrawYinYing(Graphics gr,bool xiacen) { Rectangle rect= this.ClientRectangle; rect.Inflate(-(rect.Width/10),-(rect.Height)/4); float bf1=rect.Width/100f; float bf2=rect.Height/100f; rect.Y=rect.Y+this.ClientRectangle.Height/4; if(xiacen) { rect.Y=rect.Y+4; } GraphicsPath path; for(int a=1;a<33;a++) { float bf3=bf1*a; float bf4=bf2*a; Rectangle rect1=rect; rect1.Inflate(-(int)bf3,-(int)bf4); path=GetGraphicsPath(rect1); int r=backColor.R; int g=backColor.G; int b=backColor.B; r=r+3*a; g=g+3*a; b=b+3*a; if(r>255) r=255; if(g>255) g=255; if(b>255) b=255; gr.FillPath(new SolidBrush(Color.FromArgb(r,g,b)),path); } } private void DrawGaoLiang(Graphics g,bool xiacen) { Rectangle rect= this.ClientRectangle; rect.Inflate(-4,-4); if(xiacen) { rect.Y=rect.Y+4; } GraphicsPath path=GetGraphicsPath1(rect); RectangleF rect1=path.GetBounds(); rect1.Height=rect1.Height+1; g.FillPath(new LinearGradientBrush(rect1, Color.FromArgb(0xff,0xff,0xff,0xff), Color.FromArgb(0xff,backColor),LinearGradientMode.Vertical),path); } private void DrawText(Graphics g,bool xiacen) { Rectangle rect= this.ClientRectangle; Rectangle rect1= this.ClientRectangle; StringFormat stringFormat=new StringFormat(); stringFormat.Alignment=StringAlignment.Center; stringFormat.LineAlignment=StringAlignment.Center; rect.Y=this.ClientRectangle.Height/5; if(xiacen) { rect.Y=rect.Y+4; rect1.Y=rect1.Y+4; } Font font=this.Font; if(mouseMove) { font=new Font(this.Font,FontStyle.Underline); } g.DrawString(this.Text,font, new SolidBrush(Color.FromArgb(0x66,backColor)),rect,stringFormat); g.DrawString(this.Text,font,new SolidBrush(this.ForeColor),rect1,stringFormat); }
private void UserControl1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { if(XiaCen==false) { XiaCen=true; this.Refresh(); } } private void UserControl1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { if(XiaCen==true) { XiaCen=false; this.Refresh(); } }
private void UserControl1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); e.Graphics.FillRectangle(new SolidBrush(backColor),0,0,this.Width,this.Height); e.Graphics.SmoothingMode=SmoothingMode.HighQuality; e.Graphics.TextRenderingHint=TextRenderingHint.AntiAliasGridFit; Rectangle rect=new Rectangle(0,0,this.Width,this.Height); GraphicsPath ClientPath=GetGraphicsPath(rect); e.Graphics.FillPath(new SolidBrush(backColor),ClientPath); this.Region=new System.Drawing.Region(ClientPath); DrawYinYing(e.Graphics,XiaCen); DrawGaoLiang(e.Graphics,XiaCen); DrawText(e.Graphics,XiaCen); if(this.Focused) { e.Graphics.DrawPath(new Pen(Color.FromArgb(0x22,0xff,0xff,0xff), 3), ClientPath); } }
private void UserControl1_BackColorChanged(object sender, System.EventArgs e) { int r=BackColor.R; int g=BackColor.G; int b=BackColor.B; r=r+0x22; g=g+0x22; b=b+0x22; if(r>255) r=255; if(g>255) g=255; if(b>255) b=255; backColor=Color.FromArgb(r,g,b); }
private void UserControl1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { if(XiaCen==false && e.KeyCode==Keys.Space) { XiaCen=true; this.Refresh(); } }
private void UserControl1_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e) { if(XiaCen==true && e.KeyCode==Keys.Space) { XiaCen=false; this.Refresh(); } }
private void UserControl1_MouseEnter(object sender, System.EventArgs e) { if(mouseMove==false) { mouseMove=true; this.Refresh(); } }
private void UserControl1_MouseLeave(object sender, System.EventArgs e) { if(mouseMove==true) { mouseMove=false; this.Refresh(); } } } }
|
请发表评论