01.渐变色窗体
Color颜色对象的FromArgb()方法的应用,语法结构:
public static System.Drawing.Color FromArgb(int red,int green,int blue)
Pen对象的应用
Graphics对象的DrawRectangle方法,语法结构:
public void DrawRectangle(System.Drawing.Pen pen,float x,float y,float width,float height)
{
base.OnPaintBackground(e);
int y, dy; //定义变量
y = this.ClientRectangle.Location.Y;
dy = this.ClientRectangle.Height / 256;
for(int i=255;i>=0;i--) //利用For循环语句渐变窗体背景
{
Color c=new Color(); //定义颜色对象案例
//调用Color对象的FromArgb方法
c=Color.FromArgb(255,i,0);
SolidBrush sb=new SolidBrush(c); //定义画笔颜色
Pen p = new Pen(sb, 1); //定义画笔
//绘制矩形
e.Graphics.DrawRectangle(p, this.ClientRectangle.X, y, this.Width, y + dy);
y = y + dy;
}
}
private void Form1_DoubleClick(object sender, EventArgs e)
{
this.Close();
Application.Exit();
}
02.笑脸窗体
Panel控件的应用
GrahpicsPath类的应用
Point点对象的应用
AddString方法的应用,语法结构:
string s,
System.Drawing.FontFamily family,
int style,
float emSize,
System.Drawing.Point origin,
System.Drawing.StringFormat format
)
参数意义:
s:要添加的System.String
family:一个System.Drawing.FontFamily,表示绘制文本所用字体的名称。
style:一个System.Drawing.FontStyle枚举,它表示有关文本的样式信息(粗体、斜体等),并且必须为整数。
emSize:限定字符的Em(字体大小)方框的高度。
origin:一个System.Drawing.Point,它表示文本从其起始的点。
format:指定文本格式设置信息(如行间距和对齐方式)的System.Drawing.StringFormat。
{
this.Left = (SystemInformation.PrimaryMonitorMaximizedWindowSize.Width - this.Width) / 2;
this.Top = (SystemInformation.PrimaryMonitorMaximizedWindowSize.Height - this.Height) / 2;
GraphicsPath gp = new GraphicsPath(); //创建GraphicsPath对象实例
//定义矩形区域
Rectangle rect = new Rectangle(new Point(0, 0), new Size(this.Width , this.Height));
gp.AddEllipse(rect); //绘制椭圆
this.Region=new Region(gp);
GraphicsPath gpl=new GraphicsPath();
Rectangle rectl=new Rectangle(new Point(0,0),new Size(this.panel1.Width,this.panel1.Height));
gpl.AddEllipse(rectl);
this.panel1.Region=new Region(gpl); //绘制左眼
GraphicsPath gpr = new GraphicsPath();
Rectangle rectr = new Rectangle(new Point(0, 0), new Size(this.panel2.Width, this.panel2.Height));
gpr.AddEllipse(rectr);
this.panel2.Region = new Region(gpr); //绘制右眼
GraphicsPath myPath = new GraphicsPath();
Rectangle rectm = new Rectangle(0, 0, this.panel3.Width, this.panel3.Height);
myPath.StartFigure();
myPath.AddArc(rectm, 0, 180);
myPath.CloseFigure();
this.panel3.Region = new Region(myPath); //绘制嘴
GraphicsPath gpp = new GraphicsPath();
string stringText = "退出";
FontFamily family = new FontFamily("宋体");
int fontStyle = (int)FontStyle.Bold;
int emSize = 20;
Point origin = new Point(20, 20);
StringFormat format = StringFormat.GenericDefault; //绘制退出文字
gpp.AddString(stringText, family, fontStyle, emSize, origin, format);
this.button1.Region = new Region(gpp);
}
private void button1_Click(object sender, EventArgs e)
{
if (MessageBox.Show("你确定要退出吗?", "提示信息", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
Application.Exit();
}
}
03.八边形图形窗体
利用Graphics对象绘制图案,CreateGraphics方法创建Graphics对象案例
Pen类的应用
Brush类的应用:
SolidBrush:画笔的最简单形式,它用纯色进行绘制
LinearGradientBrush:使用两种颜色的渐变色进行绘制
HatchBrush:与SolidBrush相似,但可以从大量预设的图案中选择要使用的图案,而不是纯色。
TextureBrush:使用纹理进行绘制。
PathGradientBrush:基于开发人员定义的惟一路径,使用复杂的混合色渐变进行绘制。
Color类的应用
private void timer1_Tick(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics(); //定义Graphics对象实例
Draw2D(); //调用函数Draw2D
}
public void Draw2D()
{
int i; //定义整型变量并赋值
int Sect = 8;
float r;
float[] x = new float[31]; //定义浮点型变量数组
float[] y = new float[31];
this.ClientSize = new Size(300, 300);
r = this.ClientSize.Width / 2;
Graphics g = this.CreateGraphics(); //创建Graphics对象案例
for (i = 0; i < Sect; i++) //利用For循环为数组赋值
{
x[i] = (float)(r * Math.Cos(i * 2 * Math.PI / Sect) + this.ClientSize.Width / 2);
y[i] = (float)(r * Math.Sin(i * 2 * Math.PI / Sect) + this.ClientSize.Height / 2);
}
for (int m = 0; m < Sect - 1; m++) //利用双For循环绘制图案
{
for (int n = 0; n < Sect; n++)
{
g.DrawLine(Pens.Red, x[m], y[m], x[n], y[n]); //绘制红色的直线
}
}
}
private void Form3_Load(object sender, EventArgs e)
{
this.timer1.Enabled = true; //计时器可用
this.TopMost = true; //总在最前
this.StartPosition = FormStartPosition.CenterScreen;
}
private void Form3_DoubleClick(object sender, EventArgs e)
{
this.Close(); //关闭程序
}
04.动态绘制直线和曲线
MouseUp事件、MouseMove事件和MouseDown事件的应用
Graphics对象的DrawLine()方法的应用,语法结构:
public void DrawLine(System.Drawing.Pen pen,float x1,float y1,float x2,float y2)
Graphics对象的DrawRectangle()方法的应用,语法结构:
public void DrawRectangle(System.Drawing.Pen pen,float x,float y,float width,float height)
int startY; //获取鼠标起始点的Y坐标
Graphics g; //定义Graphics对象实例
private void Form1_Load(object sender, EventArgs e)
{
this.StartPosition = FormStartPosition.CenterScreen;
this.BackColor = Color.Snow; //设置窗体背景颜色
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
g = this.CreateGraphics(); //创建Graphics对象实例
Pen p = new Pen(Color.Red, 4); //设置画笔颜色和宽度
if (radioButton1.Checked == true)
{
g.DrawLine(p, startX, startY, e.X, e.Y);
}
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
startX = e.X; //为变量赋值
startY = e.Y;
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
g = this.CreateGraphics();
Pen p = new Pen(Color.Blue, 2); //设置画笔颜色和宽度
if (radioButton2.Checked == true)
{
g.DrawRectangle(p, e.X, e.Y, 1, 1); //绘制曲线
}
}
private void button1_Click(object sender, EventArgs e)
{
g = this.CreateGraphics();
g.Clear(Color.Snow); //清空窗体背景
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
Application.Exit();
}
05.动态绘制验证码
产生随机数的Random类的应用
Bitmap对象的SetPixel()方法的应用,语法结构:
Public void SetPixel(int x,int y,System.Drawing.Color color)
{
int number; //定义变量
char code;
string checkCode = String.Empty;
Random random = new Random(); //产生非负随机数
for (int i = 0; i < 4; i++) //利用For循环产生4由英文字母或数字组成的字符串
{
number = random.Next();
if (number % 2 == 0)
code = (char)('0' + (char)(number % 10)); //随机数字
else
code = (char)('A' + (char)(number % 26)); //随机字母
checkCode += " " + code.ToString();
}
return checkCode; //返回产生的随机数字和字母
}
private void CodeImage(string checkCode)
{
if(checkCode==null||checkCode.Trim()==String.Empty)
{
return;
}
System.Drawing.Bitmap image=new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length*50.0)),50);
Graphics g=Graphics.FromImage(image);
try
{
Random random=new Random(); //产生非负随机数
g.Clear(Color.White); //清空图像背景色
for (int i = 0; i < 3; i++) //绘制图像的背景噪声线
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height);
g.DrawLine(new Pen(Color.Black), x1, y1, x2, y2);
}
Font font=new System.Drawing.Font("Arial",40,(System.Drawing.FontStyle.Bold));
g.DrawString(checkCode,font,new SolidBrush(Color.Red),2,2);
//绘制图像的前景噪声点
for(int i=0;i<1000;i++)
{
int x=random.Next(image.Width);
int y=random.Next(image.Height);
image.SetPixel(x,y,Color.FromArgb(random.Next()));
}
//绘制图像的边框线
//g.DrawRectangle(new Pen(Color.Silver),0,0,image.Width-1,image.Height-1);
this.pictureBox1.Width=image.Width;
this.pictureBox1.Height=image.Height;
this.pictureBox1.BackgroundImage=image;
}
catch
{
}
}
private void Form2_Load(object sender, EventArgs e)
{
CodeImage(CheckCode()); //调用函数CodeImage
}
private void button1_Click(object sender, EventArgs e)
{
CodeImage(CheckCode());
}
private void button2_Click(object sender, EventArgs e)
{
Application.Exit();
}
06.椭圆及椭圆弧的绘制
Graphics对象的DrawEllipse()方法的应用,语法结构:
public void DrawEllipse(System.Drawing.Pen pen,float x,float y,float width,float height)
Graphics对象的DrawArc()方法的应用,语法结构:
public void DrawArc(System.Drawing.Pen pen,float x,float y,float widht,float height,float startAngle,float sweepAngle)
startAngle:从x轴到弧线的点沿顺时针方向度量的角(以度为单位)
sweepAngle:从startAngle参数到弧线的结束点沿顺时针方向度量的角(以度为单位)
Graphics对象的FillPie()方法的应用,语法结构:
public void FillPie(System.Drawing.Brush brush,float x,float y,float width,float height,float startAngle,float sweepAngle)
{
Bitmap bitM = new Bitmap(this.pictureBox1.Width, this.pictureBox1.Height);
Graphics g = Graphics.FromImage(bitM);
g.Clear(Color.White);
g.DrawEllipse(new Pen(Color.Blue), 10, 10, 100, 50); //绘制椭圆
this.pictureBox1.BackgroundImage = bitM;
}
private void button2_Click(object sender, EventArgs e)
{
Bitmap bitM = new Bitmap(this.pictureBox2.Width, this.pictureBox2.Height);
Graphics g = Graphics.FromImage(bitM);
g.Clear(Color.White);
g.DrawEllipse(new Pen(Color.Blue), 30, 10, 70, 50); //绘制圆
this.pictureBox2.BackgroundImage = bitM;
}
private void button3_Click(object sender, EventArgs e)
{
Bitmap bitM = new Bitmap(this.pictureBox3.Width, this.pictureBox3.Height);
Graphics g = Graphics.FromImage(bitM);
g.Clear(Color.White);
g.DrawArc(new Pen(Color.Blue), 10, 10, 90, 50, 30, 180); //绘制椭圆弧
this.pictureBox3.BackgroundImage = bitM;
}
private void button4_Click(object sender, EventArgs e)
{
Bitmap bitM = new Bitmap(this.pictureBox4.Width, this.pictureBox4.Height);
Graphics g = Graphics.FromImage(bitM);
g.Clear(Color.White);
g.FillPie(new SolidBrush(Color.Red), 10, 10, 100, 50, 90, 270); //绘制填充椭圆弧
g.FillPie(new SolidBrush(Color.Yellow), 10, 10, 100, 50, 90 + 270, 90);
this.pictureBox4.BackgroundImage = bitM;
}
private void button5_Click(object sender, EventArgs e)
{
this.Close();
Application.Exit();
}
07.移动鼠标复制坐标区域图像
PointToScreen()方法的应用,语法结构:
public System.Drawing.Point PointToScreen(System.Drawing.Point p)
Size对象的应用
Graphics对象的CopyFromScreen()方法的应用,语法结构:
public void CopyFromScreen(int courceX,int sourceY, int destinationX,int destinationY,System.Drawing.Size blockRegionSize)
参数意义:
sourceX:位于源矩形左上角的点的x坐标
sourceY:位于源矩形左上角的点的y坐标
destinationX:位于目标矩形左上角的点的x坐标
destinationY:位于目标矩形左上角的点的y坐标
blockRegionSize:要传输的区域大小
{
Point myp = this.PointToScreen(e.Location);
Graphics myg = this.CreateGraphics();
Size mys = new Size(100, 100);
myg.CopyFromScreen(myp.X - 50, myp.Y - 50, 0, 0, mys);
myg.Dispose();
}
08.动态获取当前程序的图标
Icon对象的应用
Graphics对象的DrawImage()方法的应用,语法结构:
public void DrawImage(System.Drawing.Image image,float x,float y)
Graphics对象的DrawString()方法的应用,语法结构:
public void DrawString(string s,System.Drawing.Font font,System.Drawing.Brush brush,float x,float y)
{
Icon icon1 = new Icon(this.Icon, 60, 60); //定义Icom对象实例
Graphics myg = this.CreateGraphics(); //创建Graphics对象实例
Bitmap bmp = icon1.ToBitmap(); //创建Bitmap对象实例
myg.DrawImage(bmp, new Point(100, 20)); //绘制图标
myg.DrawString("当前程序的图标高度:" + icon1.Height.ToString(), Font, Brushes.Red, 50, 70);
myg.DrawString("当前程序的图标宽度:" + icon1.Width.ToString(), Font, Brushes.Red, 50, 90);
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
Application.Exit();
}
09.动态获取系统图标
SystemIcons对象的应用
Graphics对象的DrawIcon()方法的应用,语法结构:
public void DrawIcon(System.Drawing.Icon icon,int x,int y)
{
Rectangle[] rects = new Rectangle[9]; //定义Rectangle数组
Pen p = new Pen(Color.Red, 2); //定义画笔
int index = 0;
for (int i = 20; i < 200; i = i + 60) //双For循环语句
{
for (int j = 20; j < 200; j = j + 60)
{
e.Graphics.DrawRectangle(p, j, i, 60, 60); //绘制矩形
if (index < 3)
{
rects[index++] = new Rectangle(j, i, 32, 32);
}
else
{
rects[index++] = new Rectangle(j, i, 60, 60);
}
}
}
//定义图标数组,并获取系统图标
Icon[] icons ={
SystemIcons.Application,SystemIcons.Asterisk,SystemIcons.Error,
SystemIcons.Exclamation,SystemIcons.Hand,SystemIcons.Information,
SystemIcons.Shield,SystemIcons.Warning,SystemIcons.WinLogo
};
for (int i = 0; i < icons.Length; i++) //利用循环绘制图标
{
e.Graphics.DrawIcon(icons[i], rects[i]);
}
}
10.动态打开、显示和缩放图像
OpenFileDialog控件的使用,属性意义:
Name:用来设置在程序代码中引用控件时使用的名称。
FileName:用来设置打开对话框的默认文件名。
InitialDirectory:用来设置对话框的默认初始目录,如果不指定,则显示为当前目录。
DefaultExt:用来设置对话框默认的文件扩展名。
Filter:用来设置对话框的文件类型,注意该属性的写法,如(文本类型*.txt)|*.txt。
Title:用来设置对话框的标题。
Multiselect:如果该属性为True,则打开对话框允许同时打开多个文件,如果为False,则一次只能打开一个文件。
{
string myname;
openFileDialog1.Filter = "*.jpg,*.jpeg,*.bmp,*.gif,*.ico,*.png,*.tif,*.wmf|*.jpg;*.jpeg;*.bmp;*.gif;*.ico;*.png;*.tif;*.wmf";
//设置打开图像的类型
openFileDialog1.ShowDialog(); //"打开"对话框
myname = openFileDialog1.FileName;
pictureBox1.Image = Image.FromFile(myname); //显示打开图像
}
private void button2_Click(object sender, EventArgs e)
{
if (pictureBox1.Width >= 50) //当图像的宽度值小于50时,就不能再缩小了
{
pictureBox1.Width = Convert.ToInt32(pictureBox1.Width * 0.8);
pictureBox1.Height = Convert.ToInt32(pictureBox1.Height * 0.8);
}
else
{
MessageBox.Show(this, "图像已是最小,不能再缩小了!", //提示对话框
"提示对话框", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private void button3_Click(object sender, EventArgs e)
{
if (pictureBox1.Width < 310) //当图像的宽度值大于310时,就不能再放大了
{
pictureBox1.Width = Convert.ToInt32(pictureBox1.Width * 1.2);
pictureBox1.Height = Convert.ToInt32(pictureBox1.Height * 1.2);
}
else
{
MessageBox.Show(this, "图像已是最大,不能再放大了!", //提示对话框
"提示对话框", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}