C#中水晶按钮的程序生成.

按钮|程序

做了一个控件,这样就可以告别图片按钮了:)

效果:

程序源代码:

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

}
}

时间: 2025-01-19 15:37:08

C#中水晶按钮的程序生成.的相关文章

photoshop中水晶按钮的制作

最终效果图 制作工具:Photoshop CS 制作过程: 1.打开一幅图片,效果如图01所示做为底图. 图01  2.设置前景色为蓝色1E5F96.选择工具箱中的"圆角矩形工具",设置半径为150,在窗口中绘制如图02所示的形状,命名生成图层为图层1. 图02 3.双击图层1,打开图层样式对话框,选择"投影"样式,设置参数如图03所示,图像效果如图04所示. 图03 分类: PS入门教程

使用Fireworks制作水晶按钮

按钮 案例欣赏对于水晶按钮的效果,大家应该见得很多了,我们使用Fireworks软件可以制作各种各样的立体水晶效果,但是不管什么样的水晶立体效果,都有一个共同的特点,为了能够实现按钮的立体效果,我们可以通过渐变色和制作高光效果来实现.效果如图1.1所示. 图 1.1卡通表情图标效果 思路分析我们首先来看看按钮的构成图,如图1.2所示: 图 1.2按钮构成图 1.任何光滑的东西都会产生镜面反射,水晶按钮当然不会例外.2.要让按钮浮出画布,阴影是少不了的.有了正确的阴影,人们感觉才会更逼真.3.这个

Photoshop实现梦幻水晶按钮

按钮 本教程的主要目的是使用photoshop中的一些最基本的工具,绘制水晶效果图标. 所使用的主要工具有:"椭圆.矩形选框工具"."椭圆.矩形工具".渐变工具. 图层面板中的主要功能:样式.编组.图层混合模式,蒙板. 因为主要针对的对象是photoshop的初学者,所以步骤相对较详细(详细的嘟嘟自己都感觉有点罗嗦). 水晶的特点是透明,晶莹,光照下来有明显的反光,也有比较明显的折射,所以下面标注了各步骤的主要目的.练习的是矩形和圆形水晶效果的设置. --建立文件-

利用.NET绘图技术制作水晶按钮控件

按钮|控件 UI(User Interface)编程在整个项目开发过程中是个颇为重要的环节,任何好的解决方案若没有良好的用户界面呈现给最终用户,那么就算包含了最先进的技术也不能算是好程序.UI编程体现在两个方面,一是设计精美的用户界面,再有就是符合大多数用户习惯和易于使用的操作流程,而制作出精美的.绚丽多彩的用户界面是博得最终用户喜爱的第一步.我们就以制作一个水晶样式的三维按钮为例来丰富.Net界面素材库,为Windows 窗体程序增加亮点. 一. 技术要点 不可否认的是,Windows编程已经

用PPT制作圆形水晶按钮

看到图1中的水晶按钮,你可能以为是在Photoshop之类的专业图形软件中制作,然后再插入到这个演示文稿中的,其实我们可以利用PowerPoint的绘图功能来制作.这样不用处理插入图片的背景,而且非常简单,只需三步操作即可. 启动PowerPoint 2002或2003,新建一个演示文稿. 新建演示文稿 步骤1:绘制圆形底图 单击"绘图"工具栏的椭圆按钮,按住"Shift"键不放的同 时按下鼠标左键拖动鼠标,画一个圆.设置它为"无线条颜色".单击

flash 绘制水晶按钮

flash 绘制水晶按钮,以前用ps可以做水晶现在我们告诉你用flash来制作水晶按钮,我们先从中间的透明小球开始.通过下面的绘制方法和过程介绍,相信你一定能掌握画立体形体的基本方法,那就是:依次画基本形状.渐变.高光.阴影. 1.在Flash中新建一个mc,名字就叫作icon_ball吧. 2.画一个正圆形,设置轮廓和填充的样式,效果如下:   3.用渐变调整工具调整一下:   4.新建一个图层,取名hilight,顺便把原来的帧改名ball . 5. 再画一个圆,移动到如图位置.   6.在

C#制作高仿360安全卫士窗体(四)- 水晶按钮

原文http://www.cnblogs.com/kovin/archive/2013/10/18/3375977.html 项目越来越紧,我也乐此不疲.自从上次C#制作高仿360安全卫士窗体(三)出来之后,就开始有一些人在说为什么还在坚持写这么落后的东西.我想说的是,我是从事企业信息化工作的,所有程序都只对内部使用.所以只要能满足需求就可以,比较高端先进的技术也没有时间去学习研究.OK继续上次的内容.上次说到制作文本框,今天要写的是怎么实现水晶按钮的制作.下面是效果图: 下面是这个按钮所需要的

求关于一个用java代码画出类似水晶按钮的效果的代码

问题描述 求关于一个用java代码画出类似水晶按钮的效果的代码 最近在做个东西,但是客户要美观点,所以来求点资料,用java或者安卓的类似水晶按钮的那个功能的代码 解决方案 http://blog.csdn.net/cometnet/article/details/8464693http://www.blogjava.net/Swing/archive/2009/02/20/255676.html 解决方案二: 用ps画好图像然后加载到程序中.需要准备好正常.悬停.按下.禁用几个不同的图片,切换

VS2010中水晶报表应用及实例

原文:VS2010中水晶报表应用及实例 基本分类如下:第一部分:VS2010简介VS2010是微软的提供的一套完整的开发环境,功能也是相当的大微软宣布了下一代开发工具和平台的正式名称,分别称为"Visual Studio Team System 2010"和".NET Framework 4.0",很显然二者会在2010年发布. VSTS 2010开发代号"Rosario"(阿根廷港市罗萨里奥),将致力于引领下一代平台发展.提高开发人员的工作效率