第十章 图 形 操 作
( 3学时)
10.1 图形操作基础
10.2 绘图属性
10.3 图形控件
10.4 图形方法
*10.5 应用
10.1 图形操作基础
10.1.1 坐标系统每个容器都有一个坐标系,构成一个坐标系,需要三个要素:坐标原点,
坐标度量单位,坐标轴的长度与方向 。 坐标度量单位由容器对象的
ScaleMode属性决定 。 缺省时为 Twip。 每英寸 1440个 Twip,20个 Twip为一磅 。
原点Height ScaleHeight
10.1.2 自行定义坐标系方法一:通过 ScaleTop,ScaleLeft,ScaleWidth和 ScaleHeight属性实现。
( ScaleTop,ScaleLeft)
例 10.1 在 Form_Paint 事件中定义窗体的坐标系。
方法二:采用 Scale方法来设置坐标系:
[对象,]Scale [(xLeft,yTop)- (xRight,yBotton)]
例如,Form1.Scale (-200,250) - (300,-150)将建立和 例 10.1一样的坐标系。
可在程序中使用 Scale方法改变坐标系统。当 Scale方法不带参数时,取消用户定义的坐标系,采用缺省坐标系。
改变坐标系后产生的影响:
(xLeft,yTop) (xRight,yBotton)
例 10.1a Line (0,0) - (1000,1000)在不同 坐标系的效果例 10.1b 控件对象在坐标系内与 X轴和 Y轴的位置保持相对不变利用图形层的特点,实现悬浮效果。
在命令按钮后放置一个表面色彩为黑色的标签即。
同一图形层内控件对象排列顺序称为 Z序列。
Zorder方法的语法为,对象,Zorder [position]
position =0 表示该控件被定位于 Z序列的前面
position = 1表示该控件被定位于 Z序列的后面例 Zorder方法的使用。
10.1.3 图形层三个 图形层放置的对象层 次 对象类型最上层 工具箱中除标签、线条、形状外的空件对象中间层 工具箱中标签、线条、形状空件对象最下层 由图形方法所绘制的图形
10.2 绘 图属性
10.2.1 当前坐标
CurrentX,CurrentY属性给出窗体或图形框或打印机在绘图时的当前坐标。
这两个属性在设计阶段不能使用。
例 10.2 利 用 CurrentX,CurrentY属性在窗体上输出立体字效果。
10.2.2 线宽与线型窗体、图形框或打印机的 DrawWidth属性给出这些对象上所画线的宽度或点的大小。 DrawWidth属性以像素为单位来度量,最小值为 1。
例 10.3 用 DrawWidth属性改变直线宽度。
窗体或图形框或打印机的 DrawStyle属性给出这些对象上所画线的形状。
设置值 线 型 图 示
0 实线 ( 缺省 )
1 长划线
2 点线
3 点划线
4 点点划线
5 透明线
6 内实线
10.2.3 填充与色彩
Visual Basic 默认采用对象的前景色 (ForeColor属性 )绘图,也可以通过以下颜色函数指定色彩。
1,RGB(红,绿,蓝 )函数 红、绿、蓝三基色使用 0—255之间的整数。
2,QBColor(颜色码 ) 颜色码使用 0—15之间的整数
10.3 图 形控件
10.3.1 Picture Box(图形框 )
主要作用:显示图片、也可作为其他控件的容器。
装入图形:图形框对象,Picture = LoadPicture(“图形文件名” )
删除图形:图形框对象,Picture = LoadPicture( )
Autosize属性设置为 True时,图形框能自动调整大小与显示的图片匹配例 10.4 颜色的渐变过程。
10.3.2 Image(图像框 )
图像框比图形框占用更少的内存快。图像框内不能保存其他控件。
Stretch属性 =False,图像框可自动改变大小以适应其中的图形。
Stretch属性 =True,图形可自动调整尺寸以适应图像框的大小。
例 10.5 图形框 Autosize属性与图像框的 Stretch属性对加载图形的影响。
SavePicture对象名,属性,文件名把绘制或装在窗体、图形框和图像框内的图形保存到 Bmp格式文件内。
10.3.3 Line(画线工具 )
10.3.4 Shape(形状 )
例 10.6
例 10.7
10.4 图形方法
10.4.1 Line方法画直线或矩形,[对象,] Line [ [Step] (x1,y1)]- (x2,y2)[,颜色 ][,B[F]]
其中:对象可以是窗体或图形框。
(x1,y1),(x2,y2)为线段的起终点坐标或矩形的左上角右下坐标。
关键字 B表示画矩形,关键字 F表示用画矩形的颜色来填充矩形。
例 10.8 用 Line方法在一个窗体上画坐标轴与坐标刻度。
例 10.9 用 Line方法在一个窗体上画随机射线。
10.4.2 Circle方法
Circle方法用于画圆、椭圆、圆弧和扇形。
10.4.3 Pset方法
Pset方法用于画点,[对象,] Pset [Step] (x,y) [,颜色 ]
参数 (x,y)为所画点的坐标,关键字 Step表示采用当前作图位置的相对值

例 10.10 本例用 Pset方法绘制阿基米德螺线
10.4.4 Point方法
Point方法用于返回指定点的 RGB颜色,其语法格式如下:
[对象,] Point (x,y)
其中参数对象与 (x,y)的意义与前述相同。
例 10.11 用 Point方法获取一个区域的信息。
利用例 10,11的处理方法可使图片产生朦胧的效果。
10.5 应用
10.5.1 几何图形绘制利用 Line方法和 Circle方法及 DrawWidth,DrawStyle和 DrawMode属性。
例 10.12 用 Circle方法在窗体上绘制由圆环构成的艺术图案 。
算法:等分半径为 r的圆周为 n份,以等分点为圆心,半径 r1绘制 n个圆 。
例 10.13
为了能绘制任意区间 [a,b]上函数 f(x) 积分面积图,可在窗体上放置一个图形框和两个文本框 。 文本框用于指定积分上下限的值,图形框用于绘图 。 根据区间
[a,b]的值设置图形框的左上角坐标为 ( a-1,b?b+1),右下角坐标为 ( b+1,-
1) 。 将区间 [a,b]等分为 n 份,在每一等分点 i上,用 Line方法连线到 ( i,i*i) 。
10.5.2 简单动画设计动画:有计划地移动一个对象包括改变对象的形状和尺寸。
编程时可以采用帧动画原理,即通过一系列静态图辅之以连续快速变化产生动画效果,也可以通过 Move方法改变图形对象的 Top及 Left属性来移动图形。动画的速度使用时钟控制。
例 10.14 通过改变图形形状演示一个陀螺在图形框内转动。
例 10.15 演示地球图标的转动,在转动时同时使地球图标在窗体内移动,并变化地球图标的尺寸。 (用 PictureClip控件来存放一组图片 )
10.5.3 图形漫游滚动图形通过滚动条的滑块移动,只要设置图形框的 Left或 Top为滑块当前值的负数,就可形成图形相对移动。
例 10.16 本例在窗体内显示一幅地图,移动滚动条漫游地图。
10.5.4 图形处理技术
1,操作象素通过 PaintPicture方法访问内置在操作系统中的 BitBlt服务程序。
dpic.PaintPicture spic,dx,dy,dw,dh,sx,sy,sw,sh,rop
其中:
参数 dpic为目标图形对象,spic为传送源,
dx,dy是传送目标矩形区域左上角坐标(目标控件内任一位置)。
dw,dh是目标形矩形区域的宽和高。
sx,sy是要传送图形矩形区域左上角坐标。
sw,sh是要传送图形矩形区域的大小。
rop指定传送的象素与目标中现有的象素组合模式(如表所示)。
常 量 数 值 说 明
v b D s t I n v e rt &H 0 0 0 5 5 0 0 9 逆转目标位图
v b N o t Src Co p y &H 0 0 3 3 0 0 0 8 复制源位图的逆到目标位图
v b Src Co p y &H 0 0 c c 0 0 2 0 复制源位图的到目标位图
v b Src I n v e rt &H 0 0 6 6 0 0 4 6 用 X O R 组合源位图与目标位图传送源 目标
PaintPicture
方法
( sx,sy)
sw
dpic.PaintPicture spic,dx,dy,dw,dh,sx,sy,sw,sh,rop
dw,dh sw,sh至少 8个 Twip
( dx,dy)
dw
dhsh
复制图形,设置目标区域左上角坐标和大小与源矩形区域相同。
翻转图形,只需改变坐标系,设置图形宽为负数,则水平翻转图形;图形高度为负数,则上下翻转图形;如果宽度和高度都为负数,则两个方向翻转图形。
放大图形,改变目标图形的宽度和高度。
旋转图形,要需要对原始图片按行和列的顺序或按列和行的顺序扫描象素点,然后在目标图形区颠倒行和列的顺序复制象素点。
例 10.17 PaintPicture方法翻转放大位图。
例 10.17a 本例使用 PaintPicture方法实现百叶窗效果。
2 使用 DrawMode属性绘制图形
DrawMode属性可以将新象素与原有象素用不同的方法组合。两次 Xor运算恢复原有象素。
例 10.18 用 鼠标选定图形中的区域复制到指定的图片框 。
例 10.18a 在 Xor运算符下图形叠加的效果。
10.5.5 改变窗体对象外观通过调用 Windows的 API函数可改变窗体的外观形状 。 VB应用程序要访问 API函数,必须在 VB应用程序中用 Declare语句将 API函数声明为外部过程 。
Declare语句将 API函数声明为外部过程
Visual Basic应用程序执行 VB程序组中的 API文本浏览器,启动 API函数查看工具。
单击“文件 |加载文本文件”命令,装入 Win32api.Txt文件。
通过“工程 /添加模块”在当前工程内加入一个 BAS模块文件。
添加指定的 API函数到选定项框中,并将函数声明复制到剪贴板。
将剪贴板中的内容粘贴到 BAS模块文件中。
将 API函数声明为外部过程,操作流程如下:
API文本浏览器应用程序文件 /加载文本文件
1。选择信息类型
2。选定选定 API函数 复制到剪贴板例 10.19 建立一个椭圆形状的窗体 。
API函数 CreateEllipticRgn建立椭圆外形区域,SetWindowRgn显示该区域 。
SetWindowRgn函数参数说明,
hWnd窗口句柄,hRgn为窗口形状,bRedraw图形重绘控制,为一逻辑值 。
句柄 (Handle)可看作一个对象的指针,通过它可访问该对象 。 可通过 API函数或对象的属性返回句柄 。
使用 API的区域设置函数不仅可以改变窗体外观,也可以改变控件外观 。
CreateEllipticRgn函数参数说明:
坐标参数采用象数值。实际显示的窗体区域由窗体的 Height,Width属性确定。需要使用 ScaleX和 ScaleY方法对窗体的度量单位进行转换。
(x1,y1)
(x2,y2)
10.5.6 在程序中加入后台音乐
API函数 sndPlaySound可以直接播放音频文件或系统声音 。 sndPlaySound函数有两个参数,lpszSoundName指定播放的音频文件或系统声音,uFlags设定播放状态 。
例 10.20 本例示范用 sndPlaySound函数播放音频文件。
调用形式,k = sndPlaySound(音频文件名,播放方式 )
播放文件为空,就可停止音乐播放注:本例要求有多媒体设备
u F l a g s 设置
u F l a g s 设 置 说 明
S N D _ S Y N C & H 0 0 同步播放
S N D _ A S Y N C & H 0 1 非同步播放
S N D _ N O D E F A U L T & H 0 2 找不到指定的语音文件时也不播放预设的声音
S N D _ L O O P & H 0 8 重复播放
S N D _ N O S T O P & H 1 0 不要停止其他正在播放的语音