[老blog] C#中水晶按钮的程序生成(老版) [2005年8月18日]

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 );
  }


  
组件设计器生成的代码

  
  
  
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();
   }

  }

  
 }

}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值