配色: 字号:
《Visual Basic 2005 程序设计》第9章 GDI+绘图
2023-05-25 | 阅:  转:  |  分享 
  
第9章 GDI+绘图本章主要内容:理解Grpahics对象。了解Visual Basic 2005的坐标及颜色的使用。绘制基本的图形。绘制文
本。创建一个画图的应用程序。编程中一个非常有趣的部分就是图形图象的处理。Visual Basic 2005几乎可以在任何控件上绘制
图形。GDI+(Graphics Device Interface)是新一代的.NET Framework中基于类的二维图形、图像
和版面的图形设备接口,换句话说,GDI+就是Windows下的图形引擎,如果要设计.NET Framework图形应用程序,就必须
使用GDI+。本章通过创建一个实例小画板应用程序演示了GDI+ 对象及其成员,包括使用画笔(Pen)、画刷(Brush)、颜色(c
olor)、Point、Rectangle和Ellipse对象等,使读者掌握基本的GDI+编程技术。概述GDI+GDI+包含在Sy
stem.Drawing.dll程序集合中,所有的GDI+类包含在System.Drawing, System.Text, Sys
tem.Printing, System.Internal , System.Imaging, System.Drawing2D
和 System.Design 六个命名空间内。其中system.Drawing 命名空间提供了对 GDI+ 基本图形功能的访问。
在System.Drawing.Drawing2D、System.Drawing.Imaging 以及 System.Drawin
g.Text 命名空间中提供了更高级的功能。根据本章实际项目的需求,引入其中的若干个。与GDI+相关的六个命名空间如表9-1所示:
表9-1 GDI+相关的六个命名空间使用GDI+绘图的基本过程同日常作画类似,基本步骤如下:第一步:选择要绘图的窗体或者控件,并创
建其Graphics对象,也就是选好画布;第二步:选择绘图的工具(Pen对象、Brush对象等);第三步:调用Graphics对象
的适当方法(DrawLine、DrawString、DrawImage等)进行绘图;第四步:调用Graphics对象的Dispos
e方法释放Graphics对象占用的内存。9.1 Graphics对象Graphics对象是GDI+的核心,使用GDI+创建绘图,
第一步总是先创建一个Graphics对象,它是用来绘制图形图像的容器,有助于图形操作的执行,然后使用GDI+的画笔、画刷等进行绘制
线条形状、填充区域、显示文本图像等操作。Graphics对象表示GDI+的绘图表面,可以将其理解为画家的画布,所有允许在其表面进行
绘图窗体和控件都具有Graphics对象,通过调用其CreateGraphics 方法获取对Graphics对象的引用。9.2 创
建Graphics对象创建Graphics的基本语法如下:Dim g As Graphicsg = 控件(或窗体).CreateG
raphics第一行声明了一个Graphics对象g;第二行调用要绘图的控件(或窗体)的CreateGraphics()方法获取对
Graphics对象的引用。通过以上两条语句,就可以在该控件或窗体的表面进行绘图了。例9.1 创建简易小画板应用程序,通过调用P
ictureBox1的CreateGraphics方法来演示Graphics对象的创建。具体操作过程:⑴ 新建项目,选择“Wind
ows应用程序”,项目名为“简易小画板”。⑵ 在解决方案资源管理器中,把“Form1.vb”改名为“frmGDIDemo.vb”。
⑶ 打开窗体设计视图,选择窗体,在属性框中修改窗体属性:Name属性改为“frmGDIDemo”;StartPosition属性改
为“CenterScreen”;Text属性改为“简易小画板”。⑷ 为窗体添加PictureBox控件,Name属性改为“picH
uaban”;添加Button控件,Name属性改为“btnString”,Text属性改为“绘制文字”。设计好的界面如图9-1所
示:图9-1 小画板程序框架⑸ 双击窗体,在代码编辑器中添加Load事件响应代码,用于把picHuaban背景设置为白色:Priv
ate Sub frmGDIDemo_Load(ByVal sender As System.Object, _ByVal e A
s System.EventArgs) Handles MyBase.Load picHuaban.BackColo
r = Color.White End Sub⑹ 双击“绘制文字”按钮,在代码编辑器中添加Click事件响应的代码: P
rivate Sub btnString_Click(ByVal sender As System.Object, _ByVal
e As System.EventArgs) Handles btnString.Click''声明g为Graphics对象Dim
g As Graphics ''通过调用CreateGraphics方法,设置g为PictureBox控件的Graphics对象引用
g = picHuaban.CreateGraphicsg.Clear(Color.White) g.Dra
wString("欢迎进入GDI+的绘图世界!", New Font("宋体", 18), Brushes.Red, 30, 20
) End Sub本例中Graphics对象g的Clear()方法用来清除画布的表面,并给画布设定指定的颜色,DrawString
()方法用来在Graphics对象上绘制指定的文本字符串,g的Dispose()方法用于释放画布所占用的内存空间。提示:本例中使
用到的(PictureBox)图片控件为Visual Basic 2005主要的绘图控件,其提供了强大的功能及一整套的绘图方法,P
ictureBox 控件主要用于显示位图、GIF、JPEG、图元文件或图标格式的图形。主要的属性及说明如下:BackColor:用
来设置PictureBox控件的背景色,基本语法:PictureBox1.BackColor=Color.RedSizeMode:
SizeMode属性用来设置PictureBox加载的图片,其摆放的位置方式,它有五个值:Normal(正常),代表将图片的左上角
与控件的左上角对齐;StrechImage表示图像的大小将随控件的大小进行调整;AutoSize表示控件随图片的大小进行调整;Ce
nterImage表示图片在控件内居中;Zoom表示自动按比例放大图片并显示在空间中。Image:窗体设计阶段通过Image属性设
置PictureBox控件显示的图片,程序运行阶段通过FromFile方法调用图片:PictureBox1.image=syste
m.drawing.Image.FromFile(“图片文件路径”)运行程序,效果如图9-2所示:图9-2 CreateGraph
ics方法示例提示:例9-1中用到了DrawString() 方法,它用于在指定位置用指定的 Brush 和 Font 对象绘制指
定的文本字符串。其基本语法为:Object.DrawString(StringOfText,font,brush,x,y)参数说明
:StringOfText:要绘制的文本;Font:绘制文本使用用的字体;Brush:绘制文本使用的画刷;x,y:绘制文本左上角的
坐标值。Visual Basic 2005中,用户几乎可以在任何控件上绘图,用户甚至可以引用Button按钮的Graphics对象
,如例9.2所示:例9.2 新建Windows项目,添加按钮控件,并在按钮控件上进行绘图操作。示例代码如下:Private Su
b Button1_Click(ByVal sender As System.Object, _ByVal e As System
.EventArgs) Handles Button1.Click Dim g As Graphics = Butt
on1.CreateGraphicsg.DrawString("欢迎进入GDI+的绘图世界!", New Font("宋体", 1
2), Brushes.Red, 30, 20)End Sub运行,单击按钮,将会在按钮的表面显示我们指定的文字,如图9-3所示图
9-3 Button1的CreateGraphics方法示例提示:还可以通过Paint事件处理过程中的PaintEventArgs
创建Graphics对象,在为控件编制 Paint 事件处理程序时,图形对象作为一个 PaintEventArgs 提供,例9.3
将对此进行演示说明。例9.3 演示了如何引用Paint事件的PaintEventArgs中的Graphics对象。具体操作为:双
击Form1窗体,输入以下代码:Private Sub Form1_Paint(ByVal sender As Object, _
ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Dim g As Graphics = e.Graphics g.DrawString("欢迎进入GD
I+的绘图世界!", New Font("宋体", 12), Brushes.Red, 20, 20)End Sub运行后效果如图
9-4所示: 图9-4 Paint事件中的Graphics对象提示:在代码段的前两行,可以看到Visual Basic 2005的
每个事件处理过程都至少接收到两个参数:发送者对象(它是产生该事件的对象)和一个与该事件有关的对象(即EventArgs对象)。在本
例中,e参数的类型是Windows.Forms.PaintEventArgs。当Graphics对象创建后,可用它绘制线条和形状、
呈现文本或显示与操作图像。通常与Graphics对象一起使用的主体对象有以下几种:Pen 类 - 用于绘制线条、勾勒形状轮廓或呈现
其他几何表示形式。 Brush 类 - 用于填充图形区域,如实心形状、图像或文本。 Font 类 - 提供有关在呈现文本时要使用什
么形状的说明。 Color 结构 - 表示要显示的不同颜色。9.3 Graphics对象的常用方法调用控件或窗体的Graphics
对象的适当方法,可以在其表面进行绘图,常用的Graphics对象的方法如表9-2所示:表9-2 Graphics对象的常用方法提示
:Graphics对象的方法都是重载的,即同一个方法具有不同的参数列表。如:DrawLine方法的重载列表。提示:Graphics
对象的方法都是重载的,即同一个方法具有不同的参数列表。如:DrawLine方法的重载列表。表9-3 DrawLine方法的重载列表
9.4 坐标系统绘图的各个方法中,都需要设置绘图的位置,所以了解Visual Basic 2005的坐标系统变得十分有必要。Vis
ual Basic 2005的坐标系统中,默认都是以象素(Pixel)为度量单位的。象素是指屏幕的亮点,如分辨率1024×768,
是指屏幕上每行分布1024个象素点,每列分布768个象素点。每个象素都有一个坐标与之对应,(x,y)表示对象上某个象素点的坐标值,
其中水平以x坐标值表示,垂直以y坐标值表示。Visual Basic 2005中默认的坐标系如图9-5所示,其左上角的坐标为(0,
0),垂直向下为正,水平向右为正。9.5 Color对象在图像绘制中,颜色非常重要,Visual Basic 2005的Color
(颜色)对象用于表示不同的颜色。Color对象是表示特定颜色的类的实例,画笔和画刷可使用Color对象来指定所呈现图形的颜色。9.
6 系统定义的颜色Visual Basic 2005中已定义了许多常用的Color颜色名称,可以直接引用,这些名称为英文,只需输入
“color.”, Visual Basic 2005就会以列表方式枚举出系统已定义的的颜色,选择即可,如图9-6所示。图9-6
Color结构使用范例9.7 用户定义的颜色除了可以使用系统已定义的颜色外,还可以使用Color.FromArgb()方法来实现用
户自定义颜色。基本语法为:Color.FromArgb(Int32,Int32,Int32)三个参数按顺序分别代表红色、蓝色和绿色
各自的亮度,每个颜色值分别从0-255分了256个亮度,其中0表示没有该颜色,而255则为所指定颜色的完整饱和度,数值越大表示该颜
色光越亮,如:Color.FromArgb(255,0,0)为红色,Color.FromArgb(0,255,0)为绿色,Colo
r.FromArgb(0,0,255)为蓝色,Color.FromArgb(255,255,0)为黄色Color.FromArgb
(255,255,255)为白色,颜色合成原理如图9-7所示。9.8 Pen对象Graphics画布对象上绘制线条、曲线以及勾勒
形状轮廓。创建Pen对象的基本语法如下:Dim p As New Pen (颜色[,粗细])下面的代码演示创建画笔对象,并修改其
属性:Dim myPen As New Pen(Color.Blue, 6) ''创建名为myPen的的画笔对象,颜色为蓝色,粗细
为6myPen.Color = Color.Red ''画笔myPen的颜色修改为红色myPen.Widt
h = 8 ''画笔myPen的粗细修改为8例9.4 在例9.1的基础上,继续完善小画板
应用程序,添加绘制线条的功能。具体操作过程:⑴ 打开例9-1 “简易小画板”项目,为窗体添加Button控件,Name属性改为“b
tnLine”,Text属性改为“绘制线条”。⑵ 双击“绘制线条”按钮,在代码编辑器中添加Click事件响应代码:Private
Sub btnLine_Click(ByVal sender As System.Object, _ByVal e As Syst
em.EventArgs) Handles btnLine.Click ''声明g为Graphics对象,即选好画布
Dim g As Graphics = picHuaban.CreateGraphics ''调用Grap
hics对象g的clear方法把画布清成白色 g.Clear(Color.White) ''声明颜色变量
,并调用FromAgrb方法进行初始化 Dim myColor As Color myColor =
Color.FromArgb(100, 100, 100) ''声明画笔对象,并设置其颜色及粗细变量 D
im mPen As New Pen(myColor, 5) ''调用Graphics对象g的DrawLine方法绘制
线条 g.DrawLine(mPen, 20, 30, 300, 30) ''修改画笔对象的颜色机粗细,并重新绘制线条
mPen.Color = Color.Red mPen.Width = 8 g.Dra
wLine(mPen, 20, 60, 350, 60) ''释放Graphics对象g占用的内存空间 g.D
ispose() End Sub提示:本例中使用到的DrawLine()方法主要用于在给定的两个端点之间绘制线条。其基
本语法如下:Object.DrawLine(Pen对象,x1,y1,x2,y2)Object 用于绘制的Gr
aphics对象Pen对象 用来绘画的画笔对象x1,y1 线条的起点坐标x2,y2
线条的终点坐标运行,单击“绘制线条”按钮,运行结果如图9-8所示:图9-8 绘制线条示例例9.5 在例9.4
的基础上,继续完善小画板应用程序,添加绘制矩形的功能。具体操作过程:⑴ 打开例9-4 “简易小画板”项目,为窗体添加Button控
件,Name属性改为“btnRectangle”,Text属性改为“绘制矩形”。⑵ 双击“绘制矩形”按钮,在代码编辑器中添加Cli
ck事件响应代码:例9.5 在例9.4的基础上,继续完善小画板应用程序,添加绘制矩形的功能。具体操作过程:⑴ 打开例9-4 “简
易小画板”项目,为窗体添加Button控件,Name属性改为“btnRectangle”,Text属性改为“绘制矩形”。⑵ 双击“
绘制矩形”按钮,在代码编辑器中添加Click事件响应代码:Private Sub btnRectangle_Click(ByVal
sender As System.Object,_ ByVal e As System.EventArgs) Handles
btnRectangle.Click Dim g As Graphics = picHuaban.CreateGr
aphics g.Clear(Color.White) Dim myColor As Color
myColor = Color.Orange Dim mPen As New Pen(myColor)
mPen.Color = Color.Red mPen.Width = 9 ''使用DrawRectang
le()方法来正方形,正方形左上角坐标为(50, 30),宽和高都是80 g.DrawRectangle(mPen,
50, 30, 80, 80) ''修改画笔对象的颜色及粗细,并重新调用DrawRectangle方法绘制矩形
mPen.Color = Color.Black mPen.Width = 3 g.Draw
Rectangle(mPen, 180, 30, 200, 80) g.Dispose() End S
ub提示:本例中使用到的DrawRectangle()方法主要用于绘制矩形。其基本语法如下:Object. DrawRectang
le (Pen对象,x1,y1,width,height)Object:用于绘制的Graphics对象;Pen对象:用来绘画的画笔
对象;x1,y1:矩形的左上角坐标;width:矩形的宽度;height:矩形的高度.运行,单击“绘制矩形”按钮,运行结果如图9-
9所示例9.6 在例9.5的基础上,为小画板添加绘制圆形及椭圆的的功能。具体操作过程:⑴ 打开例9-5“简易小画板”项目,为窗体
添加Button控件,Name属性改为“btnEllipse”,Text属性改为“绘制圆形(椭圆)”。⑵ 双击“绘制圆形(椭圆)”
按钮,在代码编辑器中添加Click事件响应代码:Private Sub btnEllipse_Click(ByVal sender
As System.Object, _ByVal e As System.EventArgs) Handles btnEllip
se.Click Dim g As Graphics = picHuaban.CreateGraphics
g.Clear(Color.White) Dim myColor As Color myColor
= Color.Red Dim mPen As New Pen(myColor, 3) ''调用DrawRectan
gle()方法来正方形,正方形左上角坐标为(10, 20),宽和高设置为100 g.DrawRectangle(mP
en, 10, 20, 100, 100) ''调用DrawEllipse()方法来画正圆,正圆所处矩形的左上角坐标为
(10, 20),宽和高设置为100 g.DrawEllipse(mPen, 10, 20, 100, 100)
''定义Rectangle(矩形)结构,该结构存储一组整数,共四个,表示一个矩形的位置和大小 Dim r
As Rectangle r = New Rectangle(140, 20, 100, 100) ''
调用DrawEllipse()方法来画正圆,正圆的形状由已定义的Rectangle结构来决定 g.DrawEllip
se(mPen, r) ''调用DrawEllipse()方法来画椭圆,椭圆所处矩形的左上角坐标为(270, 20)
g.DrawEllipse(mPen, 270, 20, 150, 100) g.Dispose()End S
ub运行,单击“绘制圆形(椭圆)”按钮,运行结果如图9-10所示:图9-10 绘制圆形及椭圆示例提示:椭圆可以被看作一个正圆为适合
一个矩形而产生形变的结果,矩形的宽和高分别代表了椭圆的长轴和短轴,椭圆的位置由所处的矩形的左上角坐标决定。正圆是椭圆的一种特殊形式
(长轴等于短轴)。本例中使用到的DrawEllipse()方法主要用于绘制椭圆或者正圆。其基本形式有两种:Object . Dra
wEllipse (Pen对象,x1,y1,width,height)Object . DrawEllipse (Pen对象,re
ctangle)第一种参数形式与例10.5中介绍的DrawRectangle()方法是一致的,其参数意义同DrawRectangl
e()方法。第二种参数形式中,使用到了rectangle(矩形)结构,该结构存储了一组整数,共四个,分别表示一个矩形的位置、宽及高
,即绘制由矩形结构定义的椭圆。9.9 Brush对象Brush是画刷对象,是填充图形的工具,用于与Graphics对象一起创建实心
形状和呈现文本的对象。实际上没有Brush对象,Brush只是一个抽象类,它可被所有实现画刷的类所继承。几种不同的画刷对象如表9-
4所示:表9-4 几种画刷对象说明创建单色画刷(SoliBrush)的语法如下: Dim sBrush As Sol
idBrush sBrush = New SolidBrush(颜色)下面的示例代码创建单色画刷对象,并修改其属性:
Dim sBrush As New SolidBrush(Color.Blue) ''创建名为sBrush的的单色画刷对象,颜色为
蓝色sBrush.Color = Color.Red ''画刷sBrush的颜色改为红色创建系统预
设图案画刷(HatchBrush)的语法如下: Dim hBrush As HatchBrush hB
rush = New HatchBrush(hatchStyle枚举样式, 前景色 [,背景色])提示:预设图案的HatchSty
le枚举样式有54个成员,表9-5列出了几种典型样式,更多样式说明可查HatchStyle枚举相关帮助获取详细信息。表9-5 几种
典型的HatchStyle枚举样式提示:预设图案的HatchStyle枚举样式在System.Drawing.Drawing2D命
名空间中定义,使用前必须导入该命名空间,具体操作如下:1.在“解决方案资源管理器”中,双击项目的“My Project”节点。2.
在“项目设计器”中,单击左侧“引用”选项卡。3.在“导入的命名空间”列表中,选中命名空间“.Drawing2D”对应的复选框。注:
如果命名空间“System.Drawing.Drawing2D”没有出现在列表中,则点击该窗口中的 “添加(A)…”按钮,在弹出的
“添加引用”对话框中选择“.NET”选项卡,选择“System.Drawing”,并点击“确定”即可。例9.7 在例9.6的基础
上,使用单色Brush对象和预设图案样式的Brush对象,进行各种图形的填充。具体操作过程:⑴ 打开例9-6“简易小画板”项目,为
窗体添加Button控件,Name属性改为“btnSBrush”,Text属性改为“单色画刷”;添加Button控件,Name属性
改为“btnHBrush”,Text属性改为“预设图案画刷”。⑵ 双击“单色画刷”按钮,在代码编辑器中添加Click事件响应代码:
Private Sub btnSBrush_Click(ByVal sender As System.Object, _ByVal
e As System.EventArgs) Handles btnSBrush.Click Dim g As G
raphics = picHuaban.CreateGraphics g.Clear(Color.White)
''创建一支红色的画刷对象 Dim sBrush As SolidBrush sBrush =
New SolidBrush(Color.Red) ''调用FillEllipse()方法填充图形 g
.FillEllipse(sBrush, 40, 20, 100, 100) ''更改画刷对象sBrush的颜色,并调
用FillEllipse()方法填充图形 sBrush.Color = Color.FromArgb(120, 20
0, 100) g.FillEllipse(sBrush, 220, 20, 160, 100) g.
Dispose() End Sub运行,单击“单色画刷”按钮,运行结果如图9-11所示:提示:本例中使用到的FillEllipse
()方法主要用于填充边框所定义的椭圆的内部。其基本形式有两种:Object . DrawEllipse (Brush对象,x1,y
1,width,height)Object . DrawEllipse (Brush对象,rectangle)FillEllips
e()方法两种常用形式的参数意义参考例9-6。⑶ 双击“预设图案画刷”按钮,在代码编辑器中添加Click事件响应代码:Privat
e Sub btnHBrush_Click(ByVal sender As System.Object, _ByVal e As
System.EventArgs) Handles btnHBrush.Click Dim g As Graphics
= picHuaban.CreateGraphics g.Clear(Color.White) ''创
建预设图案的画刷对象,并设置其预设的图案样式 Dim hBrush As HatchBrush hBr
ush = New HatchBrush(HatchStyle.OutlinedDiamond, Color.Red, Color
.Blue) ''调用FillRectangle()方法填充图形 g.FillRectangle(hBrush, 40
, 20, 100, 100) ''更改画刷对象sBrush的预设图案样式,并调用FillRectangle()方法填
充图形 hBrush = New HatchBrush(HatchStyle.DiagonalBrick, Colo
r.White) g.FillRectangle(hBrush, 220, 20, 160, 100)g.Dispo
se() End Sub运行,单击“预设图案画刷”按钮,运行结果如图9-12所示:图9-12 预设图案画刷演示提示:
本例中使用到的FillRectangle()方法主要用于填充矩形的内部。其基本形式有两种:Object . FillRectang
le (Brush对象,x1,y1,width,height)FillRectangle()方法的参数意义参考例9-5。例9.8
本例中将完成手动画图功能,可以设定画笔的粗细及颜色。说明:通过调整HscrollBar控件设置画笔的粗细,通过按钮“设定颜色”调
用ColorDialog来设置画笔的颜色,调用MouseDown,MouseMove事件进行任意图形的绘制。具体操作过程:⑴ 新建
项目,选择“Windows应用程序”,项目名称为“手动画板”,为窗体添加Label控件,修改其Text属性为“画笔粗细=1”;添加
HScrollBar控件,修改其Name属性为“penScrollBar”,Minimum属性为1,Maximum属性改为15,L
argeChange属性改为。⑵ 在窗体中间部分添加PictureBox控件,Name属性改为“picHuaban”;窗体下方添加
Button控件,Name属性改为“btnColor”,Text属性改为“设定颜色”;再添加一个Button控件,Name属性改为
“btnClear”,Text属性改为“清空画板”;在窗体上放置一个ColorDialog控件。设计好的界面类似图9-13。⑶ 代
码编辑器中,声明几个变量,代码如下: ''定义画笔的颜色变量 Dim penColor As Color ''定义画
笔的粗细变量 Dim c As Integer ''定义坐标变量 Dim x, y As Integer⑷ 在窗体
空白处双击进入代码编辑窗口,添加如下代码:Private Sub Form1_Load(ByVal sender As Syste
m.Object, ByVal e _ As System.EventArgs) Handles MyBase.Load
''设定画板背景 picHuaban.BackColor = Color.White ''设定笔的默
认颜色 penColor = Color.Red c = 1 End Sub⑸ 在按钮“设定颜色
”上双击进入代码编辑窗口,添加如下代码:Private Sub btnColor _Click(ByVal sender As S
ystem.Object, ByVal e _ As System.EventArgs) Handles btnColor.Cli
ck ''调用ColorDialog1.ShowDialog()方法调出“颜色”对话框 ColorDia
log1.ShowDialog()''用ColorDialog的Color属性设置画笔的颜色 penColor = C
olorDialog1.Color End Sub⑹ 在ScrollBar控件上双击进入代码编辑窗口,添加如下代码:
Private Sub penScrollBar_Scroll(ByVal sender As System.Object, By
Val e As System.Windows.Forms.ScrollEventArgs) Handles penScrollB
ar.Scroll ''设定Label1的Text属性 Label1.Text = "画笔粗细=" &
penScrollBar.Value.ToString End Sub⑺ 在代码编辑窗口上方的对象列表中选择“picHuab
an”,然后在右侧的事件列表选择”MouseDown”,为“picHuaban_MouseDown”过程添加代码如下: Pr
ivate Sub picHuaban_MouseDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles picHuaban.MouseDown
''当鼠标被按下,记录鼠标指针坐标值 x = e.X y = e.Y End Sub
⑻在代码编辑窗口上方的对象列表中选择“picHuaban”,然后在右侧的事件列表选择“MouseMove”,为“picHuaba
n_MouseMove”过程添加代码如下 Private Sub picHuaban_MouseMove(ByVal sen
der As Object, ByVal e As_ System.Windows.Forms.MouseEventArgs) H
andles picHuaban.MouseMove If e.Button = Windows.Forms.Mou
seButtons.Left Then Dim g As Graphics = picHuaban.Crea
teGraphics Dim p As New Pen(penColor, penScrollBar.Val
ue) ''在MouseMove事件中,鼠标左键被按下时,执行DrawLine方法进行绘图
g.DrawLine(p, x, y, e.X, e.Y) ''释放g所占用的内存
g.Dispose() x = e.X y = e.Y End If
End Sub⑼ 在按钮“清空画板”上双击进入代码编辑窗口,添加代码如下: Private Sub btnClear_C
lick(ByVal sender As System.Object, ByVal e As System.EventArgs)_
Handles btnClear.Click Dim g As Graphics = picHuaban.Crea
teGraphics g.Clear(Color.White) End Sub9.10 综合实例例9.9 画
一个饼状图及其直方图,用来统计学生成绩分布情况,计算及格率,良好率,优秀率等。(0-59,60-84,85-100)程序运行效果如
图9-14、9-15所示:图9-14 统计图示例一 图9-15 统计图示例二具体操作过程:⑴ 新建项目,选择“Windows应用程
序”,项目名称为“统计图”。⑵ 参照图9-14,为窗体添加控件。添加4个Label控件,Text属性分别为“学生考试成绩统计”、“
不及格人数(<60)”、“ 良好人数(>=60并且<85)”、“ 优秀人数(>=85)”。⑶ 添加3个TextBox,Name属
性分别为“txtNopass”、“txtNormal”、“txtGood”。添加3个Label控件,其Name及Text属性分别为
:“lblNopass”、“不及格率:”;“lblNormal”、“ 良好率:”;“lblGood”、“ 优秀率:”。⑷ 添加三个
Button控件,其Name及Text属性分别为:“btnStat”,“统计”;“btnBarGraph”、“画直方图”;“btn
PieChart”、“画饼状图”。⑸ 添加一个PictureBox控件,Name为“picGraph”。⑹ 代码编辑器中,声明几个
变量,代码如下: ''变量y1,y2,y3分别代表及格率,良好率,优秀率 Dim y1, y2, y3 As
Single ''定义画笔对象用来画坐标轴 Dim p As New Pen(Color.Black, 3)
''定义三个画刷对象用来填充直方图和饼图 Dim br1 As New SolidBrush(Color.Red)
Dim br2 As New SolidBrush(Color.Yellow) Dim br3 As New
SolidBrush(Color.Orange)⑺ 在窗体空白处双击进入代码编辑窗口,添加如下代码: Private Sub
Form1_Load(ByVal sender As System.Object, ByVal e As System.Even
tArgs) Handles_ MyBase.Load picGraph.BackColor = Color.Whi
te End Sub⑻ 在按钮“统计”上双击进入代码编辑窗口,添加代码如下: Private Sub btnStat_
Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
_ Handles btnStat.Click Dim t1, t2, t3 As Integer t
1 = Convert.ToInt16(txtNopass.Text) t2 = Convert.ToInt16(t
xtNormal.Text) t3 = Convert.ToInt16(txtGood.Text) y
1 = t1 / (t1 + t2 + t3) y2 = t2 / (t1 + t2 + t3) y3
= t3 / (t1 + t2 + t3) lblNopass.Text = "不及格率:" & Format(y
1 100, "##.#") & "%" lblNormal.Text = "良好率:" & Format(y2
100, "##.#") & "%" lblGood.Text = "优秀率:" & Format(y3
100, "##.#") & "%" End Sub⑼ 在按钮“画直方图 ”上双击进入代码编辑窗口,添加如下代码: P
rivate Sub btnBarGraph_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles btnBarGraph.Click Dim g As
Graphics = picGraph.CreateGraphics Dim a1, a2, a3, b1, b2
, b3 As Integer g.Clear(Color.White) ''定义不及格率直方图左上点的纵坐标 a1 = (1 - y1) 180 ''定义不及格率直方图的高度 b1 = y1 180 ''良好率直方图左上点的纵坐标 a2 = (1 - y2) 180 ''定义良好率直方图的高度 b2 = y2 180 ''优秀率直方图左上点的纵坐标 a3 = (1 - y3) 180 ''定义优秀率直方图的高度 b3 = y3 180 ''画纵坐标 g.DrawLine(p, 10, 10, 10, 180) ''画横坐标 g.DrawLine(p, 10, 180, 210, 180) ''画直方图说明文字 g.DrawString("不及格 良好 优秀", New Font("宋体", 12), Brushes.Blue, 30, 190) ''画不及格,良好,优秀的直方图 g.FillRectangle(br1, 30, a1, 30, b1) g.FillRectangle(br2, 100, a2, 30, b2) g.FillRectangle(br3, 170, a3, 30, b3) End Sub⑽ 在按钮“画饼状图”上双击进入代码编辑窗口,添加如下代码: Private Sub btnPieChart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_ Handles btnPieChart.Click Dim g As Graphics = picGraph.CreateGraphics Dim c1, c2, c3 As Integer ''定义c1,c2,c3用来记录不及格率,良好率,优秀率转化为角度的值 c1 = y1 360 c2 = y2 360 c3 = y3 360 g.Clear(Color.White) ''画不及格,良好,优秀的饼图 g.FillPie(br1, 20, 20, 180, 180, 0, c1) g.FillPie(br2, 20, 20, 180, 180, c1, c2) g.FillPie(br3, 20, 20, 180, 180, 0, -c3) End Sub
献花(0)
+1
(本文系大高老师首藏)