,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第11章 图形操作,11.1 度量系统,11.2 坐标系统,11.3 绘图属性,11.4 图形控件,11.5 图形方法与事件,11.6 程序举例,1,第11章 图形操作 11.1 度量系统 1,VB提供了相当丰富的图形功能,既可通过图形控件进行图形操作,也可通过图形方法在窗体或图片框上输出文字或图形。灵活使用这些图形控件和图形方法,不仅可以完成许多特殊的功能,而且可以Windows的程序界面增加活力。,2,VB提供了相当丰富的图形功能,既可通过图形控,11.1 度量系统,VB使用的缺省度量单位是,Twip(,缇),,1英寸等于1440Twip,。VB支持多种度量单位,以备不同度量的需要。,窗体、图片框或打印对象中的任何对象 必须使用它的ScaleMode属性来指定度量单位。每个窗体、图片框或打印对象的缺省度量单位都是Twip。,3,11.1 度量系统 VB使用的缺省度量单位是Twip(缇,4,4,11.2 坐标系统,绘图语句所绘制的图形,通常是通过容器控件(窗体、图片框)输出的,而每个容器控件都有一个坐标系统,坐标系是在容器控件中绘图必备的条件。,一个坐标系包括坐标度量单位、坐标原点、坐标轴的长度与方向等要素,。由坐标的原点、长度和方向3个要素确定绘制的图形在容器中的位置。,VB坐标系统是以屏幕左上角为原点(0,0),而坐标轴x、y轴分别是以向右、向下方向增加,。每个对象定位于存放它的“容器”中,对象的Top、Left属性确定了该对象左上角在“容器”中的位置。,5,11.2 坐标系统 绘图语句所绘制的图形,通,对象的坐标系统允许由用户自定义,有2种方法用于坐标系统的定义。,1通过对象的ScaleTop、ScaleLeft、ScaleWidth和ScaleHeight属性来实现。,属性ScaleTop、ScaleLeft的值用于控制对象左上角坐标,所有对象的ScaleTop、ScaleLeft属性的缺省值为0,坐标原点在对象的左上角。当改变ScaleTop或ScaleLeft的值后,坐标系的x轴或y轴按此值平移形成新的坐标原点。,6,对象的坐标系统允许由用户自定义,有2种方法用,【例11.1】定义一个系统坐标,其原点为(0,0),使原点在窗体的中央位置。,程序代码如下:,Private Sub Form_Load(),Form1.ScaleLeft=-100,Form1.ScaleTop=100,Form1.ScaleHeight=-200,Form1.ScaleWidth=200,Line(0,100)-(0,-100),Line(100,0)-(-100,0),End Sub,7,【例11.1】定义一个系统坐标,其原点为(0,0),使原点在,2采用Scale方法设置坐标系统,Scale方法是用户建立坐标系统最方便的方法,其格式如下:,对象Scale(xLeft,yTop)(xRight,yButton),其中,:对象可以是窗体、图片框或打印机。如果缺省该项,则指具有焦点的窗体对象。(xLeft,yTop)表示左上角的坐标值,(xRight,yButton)表示右下角的坐标值,均为单精度数值。,8,2采用Scale方法设置坐标系统8,系统会根据给定的坐标参数自动计算出ScaleLeft、,SclaeTop、ScaleWidth、ScaleHeight的值:,ScaleLeft=xLeft,ScaleTop=yTop,ScaleWidth=xRight-xLeft,ScaleHeight=yBotton-yTop,例如,,Form1.Scale(-100,100)(100,-100),将建立与例11.1一样的坐标系。,任何时候在程序代码中Scale方法都能有效地和自然地改变坐标系统。,当Scale方法不带参数时,则取消用户自定义的坐标系,而采用缺省坐标系,。,9,系统会根据给定的坐标参数自动计算出ScaleLeft、Scl,11.3 绘图属性,1CurrentX、CurrentY属性,CurrentX、CurrentY属性给出在容器内绘图时的当前横坐标、纵坐标,这两个属性只能在程序中设置。CurrentX、CurrentY属性的设置格式:,对象 CurrentX=x,对象 CurrentY=y,功能,:设置对象的CurrentX和CurrentY的值。,10,11.3 绘图属性1CurrentX、CurrentY属,2DrawWidth(线宽)属性,窗体、图片框或打印机的DrawWidth属性给出这些对象上所画线的宽度或点的大小。,DrawWidth属性格式:,对象DrawWidth=n,功能,:设置容器输出的线宽。,其中,:n为数值表达式,其范围为132767,该值以像素为单位表示线宽。默认值为,即1个像素宽。,11,2DrawWidth(线宽)属性11,3DrawStyle(线型)属性,窗体、图片框或打印机的DrawStyle属性给出这些对象上所画线的形状。,以上线型仅当DrawWidth属性值为1时才能产生。当DrawWidth属性值大于1且DrawStyle属性值为14时,都只能产生实线效果。当DrawWidth的值大于1,而DrawStyle属性值为6时,所画的内收实线仅当是封闭线时起作用。,12,3DrawStyle(线型)属性12,4AutoRedraw属性,AutoRedraw属性用于设置和返回对象或控件是否能自动重绘。,若AutoRedraw属性值为True时,使Form对象或PictureBox控件的自动重绘有效,否则对不接收重绘事件(Paint).,5FillStyle和FillColor属性,封闭图形的填充方式由FillStyle和FillColor属性决定。,FillColor属性指定填充图案的颜色,缺省的颜色ForeColor相同。FillStyle属性指定填充的图案,共有8种内部图案。,13,4AutoRedraw属性13,14,14,6色彩,VB默认采用对的前景色(ForeColor属性)绘图,也可通过以下方式指定。,(1)RGB函数,RGB函数通过红、绿、蓝3基色混合产生某种颜色,其函数格式为:,RGB(a,b,c),其中,:a、b、c代表红、绿、蓝3色成分,取值范围为0255之间的整数。例如RGB(0,0,0)返回黑色,RGB(255,255,255)返回白色。,(2)QBColor函数,QBColor函数QuickBasic所使用的16种颜色,其函数格式为:,QBColor(x),其中,:x称之为颜色代码,取值范围为015之间的整数,每个颜色代码代表一种颜色。,15,6色彩15,(3)用长整型代码,RGB函数与QBColor函数实际上都返回一个十六进制的长整数。这个数从左到右,每2位一组代表一种基色,它们的顺序是蓝绿红。因此也可直接使用6位的十六进制颜色代码。在色彩的属性设置框中可以看到这些代码(例如&H000000&表示黑色,&H0000FF&表示红色等)。,16,(3)用长整型代码16,11.4 图形控件,VB提供了4个控件以简化与图形有关的操作,它们是,PictureBox控件、Image控件、Shape控件、Line控件,,每一个控件都适用于一个特定的目的。Image、Shape和Line控件需要较少的系统资源,且包含PictureBox中可用的属性、方法和事件的子集,因此,比PictureBox控件显示得快。,图形控件的优点是,创建图形所用的代码比图形方法用的少。,VB提供的图片框和图像框可以显示位图、图标、图元文件中的图形,也可处理GIF和JPEG格式的图形文件。,17,11.4 图形控件 VB提供了4个控件以简化,1Line(直线)控件,在设计时可以用Line控件来画线,长度、宽度、颜色、虚实线等属性均可设置。,2Shape(形状)控件,Shape控件可用来画矩形、正方形、椭圆、圆、圆角矩形及圆角正方形。当Shape控件放置到窗体时显示为一个矩形,通过Shape属性可确定所需的几何形状。,18,1Line(直线)控件18,【例11.2】产生Shape控件的6种形状,,,在窗体上添加一Shape控件,Index属性设置为0。,程序代码如下:,Private Sub Form_Activate(),Dim i As Integer,r As Integer,r=50,Print 0 1 2 3 4 5,Shape1(0).Shape=0:Shape1(0).FillStyle=2,Shape1(0).FillColor=vbRed,For i=1 To 5,Load Shape1(i),Shape1(i).Left=Shape1(i-1).Left+600,Shape1(i).Shape=i,Shape1(i).FillStyle=i+2,Shape1(i).FillColor=RGB(r+i*30,0,0),Shape1(i).Visible=True,Next i,End Sub,19,【例11.2】产生Shape控件的6种形状,19,3PictureBox(图片框)控件,PictureBox控件的主要作用是为用户显示图片,也可作为其它控件的容器。实际显示的图片由Picture属性决定。Picture属性可设置被显示的图片文件名(包括可选的路径名)。在代码中可以LoadPicture()在图片框中装载图形文件,其格式如下:,.Picture=LoadPicture(图形文件名),为了在运行时从图片框中删除一个图片,可用以下方式实现:,.Picture=LoadPicture(),20,3PictureBox(图片框)控件20,Picture控件不提供滚动条。也不能伸展被装入的图片以适应控件的大小,但是可以用图片框AutoSize属性调整图片框的大小以适应图片的大小。当AutoSize设置True时,图片框能够自动调整大小与显示的图片相匹配;当AutoSize设置False时,图片框不能自动调整大小来适应其中的图片,加载到图片框中的图片保持原始尺寸,这就意味着如果图片比图片框大,则超过的部分将被剪裁掉。,21,Picture控件不提供滚动条。也不能伸展被,4Image(图像框)控件,在窗体上使用图像框的步骤与图片框相同,但是图像框比图片框占用更少的内存,描绘得更快,与图片框不同的是图像框内不能放置其它控件。,图像框没有AutoSize属性,但有Stretch属性。Stretch属性设置为False时,图像框可自动改变大小以适应其中的图片;Stretch属性设置为True时,加载到图像框的图片可自动调整尺寸以适应图像框的大小。如果图像框内装入的图形较大,在Forme比较小的情况下,图像框的边界会被窗体的边界截断。,22,4Image(图像框)控件22,11.5 图形方法与事件,1Pset方法,Pset方法用于画点,其格式如下:,对象Pset Step(x,y),颜色,功能,:在由指定的容器内,在坐标为(x,y)的位置上画一个点;若省略,则默认为窗体。,说明,:关键字Step表示采用当前作图位置的相对值;采用背景颜色可清除某个位置上的点;利用Pset方法可以画任意曲线。,23,11.5 图形方法与事件1Pset方法23,【例11.3】利用Pset方法绘制阿基米德螺线,。,程序代码如下:,Private Sub Form_Resize(),Dim i As Integer,j As Single,Dim x As Single,y As Single,DrawWidth=2,For i=0 To 5000,PSet(i,600),vbRed,Next i,For j=0 To 20 Step 0.01,y=30*j*Cos(j)+600,x=50*j*Sin(j)+1200,PSet(x,y),RGB(0,0,255),Next j,End Sub,24,【例11.3】利用Pse