项目五 窗体上绘图 任务列表: 1、在窗体上绘制各种基本图形 2、在窗体上绘制文本
一、项目教学目标 1、学会Graphic对象的使用 2、学会画笔的使用 3、学会使用矩形 4、学会绘制各种形状 5、学会绘制文本 6、掌握持久化窗体上图形的方法
二、项目知识准备 1、GDI+与绘图命名空间 (1)GDI+的概念 GDI+是GDI(Graphics Device Interface,图形设备接口)的改进产品。 (2)GDI+的绘图命名空间 用户所使有的GDI+函数都保存在System.Drawing.d11程序集中。其中包括System.Drawing、System.Drawing.Text、System.Drawing.Printing、System.Drawing.Imaging、System.Drawing.Drawing2D和System.Drawing.Design等命名空间。
二、项目知识准备 2、 Graphics对象 创建Graphics对象的方法—般有三种 : (1)利用窗体或控件的Paint事件的参数PaintEventArgs创建Graphics对象。 利用该方式创建Graphics对象的例子如下: privatevoidForml_Paint(object sender,PaintEventArgs e) { Graphics g=e.Graphics;//声明一个Graphics对象g }
二、项目知识准备 (2)使用窗体或控件的CreateGraphics方法 窗体和控件类都有一个CreateGraphics方法,通过该方法可以在程序中生成此窗体或控件所对应的Graphics对象。这种方法一般应用于对象已经存在的情况下。如下所示 Graphics g; g=this.CreateGraphics(); (3)使用Image的派生类创建Graphics对象。使用Image的任何派生类均可以生成相应的Graphics对象,这种方法一般适用于在C#中对图像进行处理的场合。如下: Bitmap b=new Bitmap("Mybmp.bmp"); Graphics g=Graphics.FromImage(b);
二、项目知识准备 3. Pen对象 (1)Pen对象的创建 Pen类的构造函数有四种,使用方法如下。 创建某一颜色的Pen对象:public Pen(Color) 创建某一刷子样式的Pen对象:public Pen(Brush) 创建某—刷子样式并具有相应宽度的Pen对象:public Pen(Brush,float) 创建某一颜色和相应宽度的Pen对象:public Pen(Color,float)
二、项目知识准备 (2)Pen对象的常用属性 (1)Alignment属性:用来获取或设置此Pen对象的对齐方式。 (2)Color属性:用来获取或设置此Pen对象的颜色。 (3)Width属性:用来获取或设置此Pen对象的宽度。 (4)DashStyle属性:用来获取或设置通过此Pen对象绘制的虚线的样式。 (5)DashCap属性:用来指定虚线两端风格,是一个DashCap枚举型的值。 (6)StartCap属性:用来获取或设置通过此Pen对象绘制的直线起点的帽样式。 (7)EndCap属性:用来获取或设置通过此Pen对象绘制的直线终点的帽样式。 (8)PenType属性:用来获取用此Pen对象绘制的直线的样式。
二、项目知识准备 4. Font对象 Font对象的常用属性
二、项目知识准备 例如有下列程序代码: private void button1_Click(object sender, System.EventArgs e) { Font fnt=new Font("Tahoma",20,FontStyle.Bold |FontStyle.Italic);//创建字体 Graphics g=this.CreateGraphics();//创建Graphics对象 g.DrawString("GDI+编程世界",fnt,new SolidBrush(Color.Blue),14,10);//输出文字 } 程序的执行结果如图5-1所示。
二、项目知识准备 图5-1 程序运行结果
二、项目知识准备 5. Brush对象 (1)SolidBrush画刷 SolidBrush类用来定义单一颜色的Brush,其构造函数如下。 public SolidBrush(Color.Color) 例如: SolidBrush MyBrush=new SolidBrush(Color.Blue); 该语句创建了一个名为MyBrush的蓝色画刷。 (2)HatchBrush画刷 HatchBrush类的构造函数有两种,分别如下:
二、项目知识准备 [格式1]:public HatchBrush(HatchStyle, Color); [格式2]:public HatchBrush(HatchStyle, Color, Color); HatchBrush画刷具有三个属性,分别如下: BackgroundColor属性:获取此 HatchBrush 对象的背景色。 ForegroundColor属性:获取此 HatchBrush 对象的前景色。 HatchStyle属性:获取此 HatchBrush 对象的阴影样式。 例如,有下列语句: HatchBrushHb=new HatchBrush(HatchStyle.Cross ,Color.Blue); 该语句创建一个名为Hb的画刷对象,该画刷的前景色为蓝色,填充样式为十字交叉。
(3)LinearGradientBrush画刷 二、项目知识准备 (3)LinearGradientBrush画刷 LinearGradientBrush类的构造函数有多种格式,最常用的格式如下。 public LinearGradientBrush(Point1, Point2, Color1, Color2); 该构造函数有四个参数,其中Point1是表示渐变的起始点,Point2是表示渐变的终结点,Color1表示的渐变的起始色,Color2表示的是渐变的终止色。此处的Point1和Point2是Point结构型的变量,Point结构表示一个点,有两个成员x和y,分别表示点的横坐标和纵坐标。
二、项目知识准备 例如有下列程序段: private void button1_Click(object sender, System.EventArgs e) { Graphics g=this.CreateGraphics();//生成图形对象 Pen Mypen=new Pen(Color.Green,5);//生成画笔 LinearGradientBrush MyBrush =new LinearGradientBrush( new Point(0,20), new Point(20,0),Color.Yellow ,Color.Blue );//生成渐变画刷 g.FillRectangle(MyBrush,0,0,200,100);//填充矩形 }
二、项目知识准备 图5-2 线性渐变填充
二、项目知识准备——常用图形的绘制方法 1.画直线 [格式1]:public void DrawLine(Pen pen,int x1,int y1,int x2,int y2); [格式2]:public void DrawLine(Pen pen,Point pt1,Point pt2); 例如有下列程序: private void button1_Click(object sender, System.EventArgs e) { Graphics g=this.CreateGraphics();//生成图形对象 Pen Mypen=new Pen(Color.Blue ,5);//生成画笔,蓝色,5个像素 g.DrawLine(Mypen,1,1,30,30);//画线 Point pt1=new Point(1,30); //生成起点 Point pt2=new Point(30,1); //生成终点 g.DrawLine(Mypen,pt1,pt2); //画线 }
二、项目知识准备——常用图形的绘制方法 图5-3 所画直线
二、项目知识准备——常用图形的绘制方法 2.画椭圆 [格式1]:public void DrawEllipse( Pen pen, Rectangle rect); [格式2]:public void DrawEllipse(Pen pen,int x,int y,int width, int height); 例如有以下程序: private void Form1_Click(object sender, System.EventArgs e) { Graphics g=this.CreateGraphics();//生成图形对象 Pen Mypen=new Pen(Color.Blue ,5);//生成画笔,蓝色,5个像素 g.DrawEllipse(Mypen,1,1,80,40);//画椭圆 Rectangle rect=new Rectangle(85,1,165,40);//生成矩形 g.DrawEllipse (Mypen,rect);//画椭圆 }
二、项目知识准备——常用图形的绘制方法 图5-4 绘制的椭圆
二、项目知识准备——常用图形的绘制方法 3.绘制圆弧 [格式1]:public void DrawArc(Pen pen,Rectangle rect,float startAngle,float sweepAngle); [格式2]:public void DrawArc(Pen pen,int x,int y,int width,int height,int startAngle,int sweepAngle); 例如有以下程序: private void Form1_Click(object sender, System.EventArgs e) { Graphics g=this.CreateGraphics();//生成图形对象 Pen Mypen=new Pen(Color.Blue ,5);//生成画笔,蓝色,5个像素 g.DrawArc(Mypen,1,1,80,40,90,270);//画弧线 Rectangle rect=new Rectangle(85,1,165,40);//生成起点 g.DrawArc (Mypen,rect,0,90);//画弧线 }
二、项目知识准备——常用图形的绘制方法 图5-5 绘制的弧线
二、项目知识准备——常用图形的绘制方法 4.画扇形图 使用Graphics对象的DrawPie方法可以绘制扇形图,所谓扇形图其实就是把一段圆弧的两个端点与圆心相连。DrawPie方法的格式与DrawArc方法基本一致。 例如有以下程序: private void Form1_Click(object sender, System.EventArgs e) { Graphics g=this.CreateGraphics();//生成图形对象 Pen Mypen=new Pen(Color.Blue ,5);//生成画笔,蓝色,5个像素 g.DrawPie(Mypen,1,1,80,40,90,270);//画扇形 Rectangle rect=new Rectangle(85,1,165,40);//生成矩形 g.DrawPie (Mypen,rect,0,90);//画扇形 }
二、项目知识准备——常用图形的绘制方法 图5-6 绘制的饼形
二、项目知识准备——常用图形的绘制方法 5.画矩形 [格式1]: public void DrawRectangle( Pen pen, Rectangle rect); [格式2]:public void DrawRectangle(Pen pen,int x,int y,int width,int height); 例如有以下程序: private void Form1_Click(object sender, System.EventArgs e) { Graphics g=this.CreateGraphics();//生成图形对象 Pen Mypen=new Pen(Color.Blue ,2);//生成画笔,蓝色,2个像素 g.DrawRectangle (Mypen,5,5,80,40);//画矩形 Rectangle rect=new Rectangle(85,15,140,50);//生成矩形 g.DrawRectangle (Mypen,rect);//画矩形 }
二、项目知识准备——常用图形的绘制方法 图5-7 绘制的矩形
二、项目知识准备——常用图形的绘制方法 6.填充椭圆 [格式1]:public void FillEllipse(Brush brush, Rectangle rect); [格式2]:public void DrawEllipse(Brush brush,int x,int y,int width, int height); 例如有以下程序: private void Form1_Click(object sender, System.EventArgs e) { Graphics g=this.CreateGraphics();//生成图形对象 SolidBrush BlueBrush = new SolidBrush(Color.Blue);//生成填充用的画刷 int x = 0;//定义外接矩形的左上角坐标和高度及宽度 int y = 0; int width = 200; int height = 100; Rectangle rect = new Rectangle( x, y, width, height);//定义矩形 g.FillEllipse(BlueBrush,rect);//填充椭圆 }
二、项目知识准备——常用图形的绘制方法 图5-8 填充的椭圆
三、项目实践 实例一:利用鼠标画图 【实例题目】:编写一个利用鼠标在窗体上画图的程序,无论何时用户按下并拖动鼠标均会画出一条线。程序的运行界面如图5-9所示。 图5-9 程序运行界面
四、拓展训练 练习一:可擦写图形轮廓的实现 【练习题目】:建立一个让用户画一系列椭圆的程序,当用户按下并拖动鼠标时,将出现一个椭圆轮廓,该椭圆轮廓表示所画椭圆的大小。当用户松开鼠标键时,将在窗体上绘制出用蓝色填充的椭圆。图4-10是程序运行时鼠标拖动时出现的虚线轮廓,图4-11是松开鼠标后画出的椭圆。
四、拓展训练 图4-10 绘制和椭圆轮廓 图4-11 最后绘制的椭圆