68960ce6257fcf56d5c4094bd4bc5cba.ppt
- Количество слайдов: 107
第三章 Visual Basic 图形应用程序设计 v 3. 1 坐标系 v 3. 2 使用图形控件 v 3. 3 使用图形方法 v 3. 4 使用颜色 v 3. 5 使用图片对象 v 3. 6 使用API函数
第三章 Visual Basic 图形应用程序设计 Visual Basic 为应用程序的使用,提供了复 杂的文本和图形功能。如果能将文本当作可视化 的元素,则大小、形状和颜色都可以看到,这就 能增强所提供的信息。正如报纸要使用标题、专 栏和要点来把文字分成互相穿插的一些块一样, 文本的一些属性也可以用于强调重要的概念和感 兴趣的细节。Visual Basic 在设计时还提供一 些有很大灵活性的图形功能,包括添加通过显示 一连串图像所实现的动画。
3. 1 坐标系 为描述点的位置,通常使用坐标系, 在计算机图形学中,坐标系有用户坐标 系(笛卡尔坐标系)和设备坐标系。用 户坐标系又称为世界坐标系,设备坐标 系又称为屏幕(对象)坐标系。
1、二维坐标系
2、三维坐标系有两种表示方式,如图 3 -2所示。图 3 -2(a)的x -y-z轴的方向满足右手定则,称右手坐标系;图 3 -2(b)的x-yz轴的方向满足左手定则,称为左手坐标系。在计算机图形学 中,三维直角坐标常采用左手坐标系。将右手坐标系空间点转 为左手坐标系空间点很简单,只需将z坐标取负即可。坐标系 确定之后,空间任一点的位置即可用坐标表示。 图 3 -2 三维世界坐标系
3、极坐标系和球坐标系 二维直角坐标系的点的坐标(x,y)还可使用它的矢和幅角来 表示: 称为极坐标系。 球坐标系是使用点的幅角和矢径表示三维直角坐标系的点的坐 标(x,y,z): 图 3 -3 球坐标系
3. 1. 2 VB 6. 0设备坐标系 为描述对象在载体上的位置, VB 6. 0设 置 对 象 的 坐 标 系 。 VB 6. 0在 进行图形处理时的坐标系可分为窗体 坐标系和窗体内控件对象坐标系。坐 标系统是一个二维网格,可定义屏幕 上、窗体中或其它容器中(如:图片 框或 Printer 对象)的位置。
1、窗体坐标系 如图 3 -4所示,窗体上除标题栏和窗体边框以外的可供使 用的区域为 作区。在 作区,系统默认窗体坐标系的原 点在 作区的左上角。使用窗体中的坐标,可定义网格上 的位置:(x, y)。x 值是沿 x 轴点的位置,最左端是缺省位 置 0。y 值是沿 y 轴点的位置,最上端是缺省位置 0。该 坐标系统的图示:
2、窗体内控件对象坐标系 在VB 6. 0图形处理中,可使用的对象除了窗体外,通常使用图片框 (这时称图片框为容器)。使用图片框对象处理图形时,系统默认坐 标系的原点在其 作区的左上角,水平向右方向为x轴,垂直向下方 向为y轴。 以下规则用于 Visual Basic 坐标系统: (1)当移动控件或调整控件的大小时,使用控件容器的坐标系 统。如果直接在窗体上绘制对象时,窗体就是容器。如果在框架或图 片框里绘制控件时,框架或控件是容器。 (2)有的图形和 Print 方法,使用容器的坐标系统。例如,那些 在图片框里绘制控件的语句,使用的是控件的坐标系统。 一些用来调整窗体大小或移动窗体的语句,用缇来表示窗体的位 置和大小。 (3)当创建用来调整窗体大小或移动窗体的代码时,应先检查 Screen 对象的 Height 属性和 Width 属性,以确保窗体在屏幕上大小 合适。屏幕的左上角总是(0,0)。任何容器的缺省坐标系统,都是 由容器的左上角(0,0)坐标开始。 (4)沿这些坐标轴定义位置的测量单位,统称为刻度。在 Visual Basic 中,坐标系统的每个轴都有自己的刻度。坐标轴的方 向、起点和坐标系统的刻度,都是可以改变的。
3、坐标的单位 系统默认对象坐标系坐标的单位是twip(缇),在实用中也 可以由使用Scale. Mode属性对坐标的单位进行重新设置,设 置方法为: 对象名. Scale. Mode=属性值 Scale. Mode属性有8种选择,该值指示对象坐标的度量单位。 例如: Form 1. Scale. Mode = 1 '表示窗体坐标系的坐标单位是twip Form 1. Scale. Mode = 3 '表示窗体坐标系的坐标单位是像素 在缺省 设置下,Visual Basic 绘图对象的坐标是以 twip为单位,但习惯上在图形程序设计中,人们乐于使用 像素为坐标单位,使用 640× 480,800× 600等格式。
3、坐标的单位 常数 值 单位 意义 说明 Vb. User 0 User 用户自 自定义坐标系,即 Scale. Height、 定义 Scale. Width、 Scale. Left 和 Scale. Top 属性中的一个或多个被设 置为自定义的值。 Vb. Twips 1 Twip 默认 (缺省值)缇(每逻辑英寸为 1440 缇;每逻辑厘米为 567 个缇)。 Vb. Points 2 Point 点 磅(每逻辑英寸为 72 个磅)。 Vb. Pixels 3 Pixel 像素 像素(监视器或打印机分辨率的最 小单位)。 Vb. Characters 4 Character 字符 字符(水平每个单位=120 缇;垂 直每个单位=240 缇。) Vb. Inches 5 Inch 英寸 Vb. Millimeters 6 Millimeter 毫米 Vb. Centimeters 7 Centimeter 厘米
4、用户自定义坐标系 Visual Basic 允许用户用自定义坐标系,有两种具体办法。 (1) Scale 方法 通过自定义左上角和右下角坐标来设置新的人权标系统,用 户 自 定 义 坐 标 时 一 般 先 选 定 Scale. Mode=0, 然 后 设 定 Scale. Mode=3,最后用Scale方法定义坐标系。例如: Form 1. Scale. Mode = 0 Form 1. Scale. Mode = 3 Form 1. Scale (0,0)-(640,480) 这里设定窗体对象Form 1的 作区为 640× 480,单位是像 素。 作区左上角为坐标原点,y轴向下为正方向,为绘图方 便,也可以将图形坐标的原点设在 作区的中央,向上为y正 方向,向右为x正方向。例如: Scale (-320,240) -(320,-240) 。
4、用户自定义坐标系 (2)通过对象属性Scale. Left和Scale. Top直接赋值自定义坐 标系 通过对象属性Scale. Left和Scale. Top直接赋值自定义坐标系 的例子如下: Object. Scale. Width = 640 '定义对象 作区宽为 680 Object. Scale. Height = 480 '定义对象 作区高为 480 Object. Scale. Left = -320 Object. Scale. Top = 240 这里定义对象的左上角坐标是(-320,240),执行上述代 码之后,则在该对象内绘图的所有方法都将基于这个左上角 新坐标什进行计算,一般而言,当设定Scale. Width=640后, 系统将自动设置属性Scale. Mode=0。
5、纵横比 正确地设置对象的纵横比能够显示正确的图形。一般设置方法如下: asp = Scale. Height / Scale. Width '设置对象的纵横比 Scale. Width = 640 '定义窗体坐标系宽为 640 Scale. Height = -Int(Scale. Width * asp) 例:将坐标原点设在窗体 作区中央,y正方向向上并正确设置纵横比。 使用对象 Form Name = Form 1 程序代码如下: Private Sub Form_Load() Scale. Mode = 0 '用户自定义坐标系 Scale. Mode = 3 '坐标单位为像素 asp = Scale. Height / Scale. Width '纵横比 Scale. Width = 640 '定义窗体坐标系宽为 640 Scale. Height = -Int(Scale. Width * asp) '定义窗体坐标系高 Scale. Left = -Int(Scale. Width / 2) Scale. Top = -Int(Scale. Height / 2) End Sub
3. 1. 3窗口—视见变换 在图形应用程序设计中,例如三维绘图、统计图 等,给出的数据x,y值都是世界坐标系的坐标值。 因此,在设备坐标系上绘图时,需进行变换,即将 世界坐标系中的x变量的某段取值范围x 1~x 2与设备 坐标系的点坐标X 1~X 2相对应,y变量的范围y 1~y 2与 设备坐标系的点坐标Y 1~Y 2相对应,才能在屏幕上 正确地绘出图形(如图 3 -5所示)。这种从世界坐 标系中取出部分对象数据的操作称为开窗口,在设 备坐标系上设定一个矩形显示区称为开视窗。这种 将世界坐标系窗口内的对象数据,映射为设备坐标 系上指定的视图窗内的点(像素)的操作称为窗口 —视见变换。考虑到y轴方向与屏幕坐标系的Y轴方 向相反,其换算关系式如下。
3. 1. 3窗口—视见变换 X轴方向:数值区间为x 1~x 2,视见区间X 1~X 2。则数值x对应 的X为: Y轴方向:数值区间为y 1~y 2,视见区间Y 1~Y 2。则数值y对应 的Y为:(如计算X,Y为非整数时,应取整数。 )
3. 2 图形控件的限制条件 Visual Basic 提供三种控件,是为了在应用程 序中创作图形效果而设计的:image 控件、Line 控件、shape 控件 1、图形控件的优点 在设计时 ,图 像控件、直线 控件和形状控件, 对 于创 建图 形十分有用。图 形控件的一个优 点 是,需要的系统资 源比其它 Visual Basic 控件少, 这 就提高了 Visual Basic 应 用程序的性能。 图形控件的另一个优点是,创建图形所用的 代码比图形方法用的要少。例如,在窗体上放置 一个圆,既可用 Circle 方法,也可用形状控件。 Circle 方法要求在运行时用代码创建圆;而用 形状控件的话,只需在设计时简单地把它拖到窗 体上,并设置特定的属性。
3. 2 图形控件的限制条件 2、图形控件的限制条件 当图 形控件的设计 目的是为 了使性能最大化,而 对应 用程序的要求又最小化时 ,要达到这 一目 标 ,就要限制 Visual Basic 控件共有的其它功能。 图 形控件: (1)不能出现在其它控件之上,除非它们是在一个 容器里,而这个容器能出现在其它控件之上(如: 图片框)。 (2)不能在运行时接收焦点。 (3)不能作为其它控件的容器。 (4)不具有 h. Wnd 属性。 图片控件(Picture. Box)具有比上述控件更复 杂,也占用更多的内存空间。
3. 2. 1 给应用程序添加图片 图片可显示在 Visual Basic 应用程序 的三种位置处: 窗体上、图片框内、图 象控件内。 图片可来自 Microsoft Windows 的各种绘图程序,例如,随同 各种版本 Microsoft Windows 一起提供 的那些绘图程序,其它图形应用程序, 或剪切美术库等。Visual Basic 提供了 一个大图标库,可在应用程序中作为图 形使用。Visual Basic 也能象. bmp、. dib、. ico、. cur、. wmf、. emf 等文件那 样,把. jpeg 和. gif 文件添加到应用程 序中。
3. 2. 1 给应用程序添加图片 1、 设计时添加图片有两种方法: (1) 从图片文件中将图片加载到窗体上、图片框中或图象控件里: 在“属性”窗口,从“属性”列表中选择“图片”,并单击“属 性”按钮。Visual Basic 将显示一个对话框,从中可选择要加载的图片 文件。 如果给窗体设置了 Picture 属性,选定的图片就会显示在窗体上, 被放置在其上任何控件的后面。类似地,如果给图片框设置了 Picture 属性,则该图片就会显示在该框中,被放置在其上任何控件的后面。 (2)一个图片粘贴到窗体上,图片框中或图象控件里: 把图片从另一个应用程序(例如 Microsoft Paint)复制到剪贴板上。 返回 Visual Basic 环境中,选择该窗体,图片框或图象控件,然后从 “编辑”菜单上,选择“粘贴”。 一旦为窗体,图片框或图象控件设置了 Picture 属性—无论是加载 或粘帖图片—设置值框所显示的字,将是 "(Bitmap)","(Icon)",或 "(Metafile)"。为了改变此设置值,可加载或粘帖另一幅图片。双击设 置值框内所显示的字,并按 DEL 键,可将 Picture 属性重新设置为 "(None)"。
3. 2. 1 给应用程序添加图片 2、运行时添加图片 运行时 添加图 片有四种方法: (1)用 Load. Picture 函数,指定一文件名,并将该图片赋值给 Picture 属 性。 下列语句将 Cars. bmp 文件加载到名为 pic. Display 的图片框内(通 过设置其 Name 属性,可对一控件命名): pic. Display. Picture = Load. Picture(“C: PictsCars. bmp”) 任何需要的时候,都可加载一新图片到窗体上,图片框中或图象控件 里。尽管图片的源文件不会受到影响,但加载的新图片将会完全替代 正显示的图片。 (2)用Load. Res. Picture 函数,可把 程中. res 文件的一图片,赋值给 Picture 属性。 下列语句将资源文件里资源标识号 ID 为 10 的位图,加载到名为 pic. Resource 的图片框内: Set pic. Resource. Picture = Load. Res. Picture(10, vb. Res. Bitmap)
3. 2. 1 给应用程序添加图片 2、运行时添加图片 (3)对象间图片的相互复制。 如果图 片一旦被加载 或粘帖到窗体、图 片框或图 象控件以后,那么运行时 就可把它赋 值 给 另一窗体,图 片框或图 象控件。例如,下列语 句将把名 为 pic. Display 图 片框中的图 片,复制到名为 img. Display 的图 象控件内: Set img. Display. Picture = pic. Display. Picture (4)从剪贴板对象复制图片。 语法:object. Get. Data (format) format可选的。一个常数或数值,如“设置值”中所描述的,它指定 Clipboard 图形的格式。必须用括号将该常数或数值括起来。如果 format 为 0 或省略,Get. Data 自动使用适当的格式。 FORM 1. Picture = Clipboard. Get. Data 常数 值 描述 vb. CFBitmap 2 位图(. bmp文件) vb. CFMetafile 3 元文件(. wmf文件) vb. CFDIB 8 设备无关位图 (DIB) vb. CFPalette 9 调色板
3. 2. 1 给应用程序添加图片 注意 如果是在设计时从文件中加载或粘帖 图片,则图片就和窗体一起被保存和加载,而 应用程序可将图片从一个对象复制到其它对象。 然后,在创建. exe 文件时,就不必把此图片 文件的备份提供给用户,因为. exe 文件本身 包含有它的图象。另外,可以考虑提供. res 文 件和使用 Load. Res. Picture。. res 文件将被编译 到. exe 文件中,而位图则以任何资源编辑器 都可读的标准格式保存。如果要在运行时用 Load. Picture 函数加载图片,则必须把图片文 件和应用程序一起提供给用户。
3. 2. 1 给应用程序添加图片 3、运行时删除图片 也可使用 Load. Picture 函数在运行时 删 除图 片,而无须 用其它图 片替换 它。下列语 句是 从名为 img. Display 的图 象控件中删 除图 片: Set img. Display. Picture = Load. Picture("")
3. 2. 1 给应用程序添加图片 4、移动图片和改变图片尺寸 如果窗体、图片框或图象控件被移动( 设计时或运行时),则其上的图片也将自动 地随它一起移动。如果窗体、图片框或图象 控件调整大小后太小,容纳不下图片,则该 图片将从右边和底部被裁剪。如果图片被加 载或复制到那些因为过小而不能完整显示它 的窗体、图片框或图象控件时,该图片也会 被裁剪。
3. 2. 1 给应用程序添加图片 5、Auto. Size 属性: 如果想让图片框能自动扩展到可容纳新 图片的大小,可将该图片框的 Auto. Size 属 性设置为 True。这样,在运行时当往图片 框加载或复制图片时,Visual Basic 会自动 扩展该控件到恰好能够显示整个图片。由于 窗体不会改变大小,如果加载的图象大于窗 体的边距,图象经过裁剪后被显示出来。
3. 2. 1 给应用程序添加图片 6、图 象控件的 Stretch 属性: 如果要使图象控件中的图片能自动扩展 以适应特定的尺寸,可使用 Stretch 属性。 当 Stretch 属性为 False 时,图象控件自动 调整其大小以适应加载图片的要求。为了调 整图片大小以适应图象控件的要求,可将图 象控件的 Stretch 属性设置为 True。
3. 2. 2 窗体和控件的图形属性概述 窗体和各种控件都具有图形属性。下表列出这些属性。 类别 属性 Auto. Redraw, Clip. Controls 显示处理 当前绘图位置 Current. X, Current. Y Draw. Mode, Draw. Style, Draw. Width, 绘图技术 Border. Style, Border. Width Fill. Color, Fill. Style 填充技术 Back. Color, Fore. Color, Border. Color, 颜色 Fill. Color 窗体和图片框具有的一些附加属性: Scale 属性和Font 属性
3. 2. 3 用 Auto. Redraw 创建持久的图形 每 个 窗 体 和 图 片 框 都 具 有 Auto. Redraw 属 性 。 Auto. Redraw 是 Boolean 属性,当它设置为 True 时,会 把图形输出保存在内存里。可用 Auto. Redraw 属性创建持 久的图形。 1、持久的图形 Microsoft Windows 操纵 屏幕图 象,来造成重叠窗口的影 像。当一个窗口移到其它窗口上时,可暂时隐藏其它窗口, 移过 后,被覆盖的窗口和它的内容需要重新显 示。 Windows 管理和控制窗口与控件的重新显 示。而用户 的 Visual Basic 应 用程序必须 控制窗体和图 片框内图 形的重 新显 示。 如果在窗体上用图形方法创建图形,通常希望它们重 新显示在以前的位置 (persistent graphics),可用 Auto. Redraw 属性创建持久的图形。
3. 2. 3 用 Auto. Redraw 创建持久的图形 2、Auto. Redraw 和窗体 Auto. Redraw 的缺省值 是 False。当 Auto. Redraw 设 置为 False,窗体上显 示的任何由图 形方法创 建的图 形如果被 另一个窗口暂 时 挡 住,将会丢 失。另外,如果扩 大窗体, 窗体边 界外的图 形将会丢 失。设 置 Auto. Redraw 为 False 的效果如图 1所示。 设置 Auto. Redraw 为 False 的效果
3. 2. 3 用 Auto. Redraw 创建持久的图形 当窗体的 Auto. Redraw 属性设 置为 True 时 ,Visual Basic 会将图 形方法适用于内存中的一块 “画布”上。应 用程序复 制此画布的内容,以便重新显 示被其它窗口暂 时 隐 藏起来 的图 形。在大多数情况下,该 窗体画布的大小即屏幕的大 小。如果窗体的 Max. Button 属性为 False 且窗体的边 界不 可调 ,那么该 画布的大小即窗体的大小。 当窗体大小可调 时 ,该 画布也可使应 用程序保存超出窗体 边 界之外的图 形。设 置 Auto. Redraw 为 True 的结 果显 示 如下图 。 设置 Auto. Redraw 为 True 的效果
3. 2. 3 用 Auto. Redraw 创建持久的图形 3、Auto. Redraw 和图片框 当图片框的 Auto. Redraw 属性设置为 True 时,Visual Basic 仅在内存保存此图片框的可视内容。这是因为保存 图片框内容的画布,与图片框大小是相同的。超出其外的 图形被裁剪后,既使改变图片框的大小,也不能再显示。
3. 2. 3 用 Auto. Redraw 创建持久的图形 4、使用非持久的图形 可将窗体及其所有图 片框的 Auto. Redraw 设 置为 False 来 节 省内存。但那样 的图 形将不再自动 成为 持久性的。需要 时 必须 用代码 管理所有图 形的重画。 可将所有想要重画的线 、圆 、点的代码 ,包括在窗体或图 片框的 Paint 事件中。这 种方式最适用于有限个易于重建 的图 形。 无论何时需要重画窗体或图片框的一部分时,都可调用 Paint 事件过程—例如,当覆盖住对象的窗口移去后,或 重新调整窗体大小使得图形恢复可视时。如果 Auto. Redraw 设置为 True,除非应用程序显式地调用它,否则,该对象 的 Paint 过程不会被调用执行。因为对象的可视内容保存 在画布中,所以不需要 Paint 事件。
3. 2. 3 用 Auto. Redraw 创建持久的图形 5、运行时改变 Auto. Redraw 的设置 在程序中设 置 Auto. Redraw,可以在画 持久图 形(如背景色或网格)和临时 图 形之间 切换 。如果设 置 Auto. Redraw 为 False,以前的输 出成为 背景屏幕的 一部分。当 Auto. Redraw 设 置为 False, 用 Cls 方法清除绘图 区时 不会删 除背 景图 形。把 Auto. Redraw 改回 True 后, 再用 Cls 将清除背景图 形。
3. 2. 4 用 Clip. Controls 裁剪区域 Clip. Controls是 Boolean 属性,返回或设置 一个值,决定 Paint 事件中的图形方法是 重绘整个对象,还是只绘刚刚露出的区域。 在运行时为只读。 每个窗体、图片框和框架控件,都具有 Clip. Controls 属性。 当 Clip. Controls 属性为 True 时, Windows 在 Paint 事件之前,窗体或容器的 背景定义一个裁剪区域。此裁剪区域将围绕 所有非图形控件,但是不在 Image、 Label、Line 或 Shape 控件的周围 剪裁。
3. 2. 4 用 Clip. Controls 裁剪区域
3. 2. 4 用 Clip. Controls 裁剪区域 当 Clip. Controls 为 False 时 ,Windows 不 在 Paint 事件之前给 窗体或容器的背景定义 裁剪区域。而且,Paint 事件中图 形方法的输 出,只显 示在窗体或控件必须 重画的部分。 因为 计 算和管理裁剪区域需要花费 时 间 ,那 么设 置 Clip. Controls 为 False 就可以使含有 许 多非重叠控件的窗体(如复杂 对 话 框)显 示得更快。 注意: 避免将 Clip. Controls 设置为 True 的固有控件,嵌套在 Clip. Controls 属性设 置为 False 的控件内(例如:命令按钮在图 片框内)。这种控件嵌套引起控件不能准确 重绘。为解决这个问题,将容器控件和嵌套 的控件的 Clip. Controls 属性设置为 True。
3. 2. 5 动态地移动控件 使用 Visual Basic,在运行时 移动 控件是 最容易取得的效果之一。可以直接改变 控件 位置定义 的属性,也可使用 Move 方法。 1、使用 Left 和 Top 属性 Left 属性是控件左上角到窗体左边的距离。 Top 属性是控件左上角到窗体上边的距离。 通过改变 Left 和 Top 属性的设置值移动控件, 可使用以下语句: txt. Field 1. Left = txt. Field 1. Left + 200 txt. Field 1. Top = txt. Field 1. Top – 300
3. 2. 5 动态地移动控件 2、移动 Line 控件 如前面提到的,直线控件没有 Left 和 Top 属性。但是,可使用特殊的属性,对窗体上直 线控件的位置进行控制。下表列出这些属性, 以及用它们怎样决定直线控件的位置 属性 X 1 Y 1 X 2 Y 2 描述 直线起点的 x 坐标。 直线起点的 y 坐标。 直线终点的 x 坐标。 直线终点的 y 坐标。
3. 2. 5 动态地移动控件 3、使用 Move 方法 改变 Left 和 Top 或 X 和 Y 属性,会使控件产 生先水平 移动 然后再垂直移动 的颠 簸效果。Move 方法则 能产 生更 平滑的对 角线 方向的移动 。 Move 方法的语法如下: [object. ]Move left [, top[, width[, height] ] ] object 是被移动的窗体或控件。如果省略了 object,则 移动的是当前窗体。left 和 top 参数是 object 对象的 Left 和 Top 属性的新设置值,而 width 和 height 则是 它的 Width 和 Height 属性的新设置值。其中,只有 left 是必须的,但是,若要指定其它参数时,就必须一并指定 参数列表中出现在指定参数之前的所有参数。
3. 2. 5 动态地移动控件 4、绝对移动 当对 象在其容器中移动 到指定坐标 处 时 ,就是绝 对 移动 。下述语 句是用绝 对 移动 ,将名为 txt. Field 1 的 控件,移动 到坐标 (100,200)处 : txt. Field 1. Move 100, 200 5、相对移动 通过 指定从当前位置应 当移动 的距离,使 控件移动 时 ,就是相对 移动 。下述语 句是使 用相对 移动 ,将 txt. Field 1 移动 到它当前位置 向右和向下 100 缇处 : txt. Field 1. Move txt. Field 1. Left txt. Field 1. Top + 100,
3. 2. 6 动态地改变控件大小 在运行时可以改变图片框、图象控件、或窗体的大小和形状, 以下属性影响大小 属性 应用于 描述 Align Picture. Box 和 Data 控件 如果设置图片框和窗体的顶部 (1) 或底部 (2) 对 齐,该图片框的宽度等于窗体内部的宽度。如果 设置图片框和窗体的左边 (3) 或右边 (4) 对齐, 该图片框的高度等于窗体内部的高度。 Height 除 Timer、菜单、和 用窗体的刻度模式表示的对象高度(缺省是缇数 Line 以 外 的 所 有 窗 )。 体和控件 Width 除 Timer、菜单、和 用窗体的刻度模式表示的对象宽度(缺省是缇数 Line 以 外 的 所 有 窗 )。 体和控件 Auto. Siz e Label 和 Picture. Box 如果为 Ture,则总是要使 Visual Basic 根据内容 大小调节图片框的尺寸。 Stretch Image 控件 如果为 True,位图或元文件拉伸到适合图像控件 的大小。如果为 False,图像控件的大小要与它 包含的位图或元文件的大小相匹配。
3. 2. 7 创建简单动画 在运行时 改变 图 片可以创 建简 单 动 画。最简 单 的方法是在两幅图 片之间 切 换 。也可通过 几个框架使用一系列图 片来创 建动 画。还 可使图 片动 态 地移动 , 能够创 建出更精致的动 画。 1、在两幅图片之间切换 一些图标可成对使用。例如,在 Icon 子目录中有两个匹配的信封图标,一 个信封未打开,一个已撕开,如下图中所示。通过在这两个图标之间进行转换, 或称切换,可创建一个动画,以便显示邮件的状态。 下列语 句改变 名为 img. Mail. Status 的图 标 控件的 Picture 属性,以便将它的 图 片从一个未打开的信封切换 到一个打开的信封。 img. Mail. Status. Picture = img. Mail. Open. Picture 2、在一些图片间轮转 通过在多个图片之间进行轮转,可以创建更长的动画。这项技术基本和在两 幅图片之间切换一样,但是需要应用程序进行选择当前图像所用位图的操作。对 动画中各个图片进行控制的一种方法,是使用控件数组。
3. 3 使用图形方法 除了图形控件之外,Visual Basic 还提供有创建图 形的一些方法。总结在下表中的这些图形方法,适用于窗 体和图片框。 方法 Cls PSet Point Line Circle Paint. Picture 描述 清除所有图形和 Print 输出。 设置各个像素的颜色。 返回指定点的颜色值。 画线、矩形、或填充框。 画圆、椭圆、或圆弧。 在任意位置画出图形。 注意 Print 方法也可认为是一种图形方法,因为它的输出也写 在对象上,并象PSet、Line 和 Circle 方法一样,也要以内存 图像的方式进行保存(如果 Auto. Redraw 是打开的)。
3. 3 使用图形方法 1、图形方法的优点 在许 多的 作需要使用图 形控件的情况下,图 形方法 能 作得很好。例如,在图 表中要创 建网格线 需要用到直 线 控件数组 ,而使用 Line 方法时 却只需少量代码 即可。当 窗体改变 大小时 ,跟踪数组 中 Line 控件的位置,比起用 Line 方法简单 地重新画线 要麻烦 得多。 当需要可视的效果直接显示在窗体上时,如,要显示出 有关对话的色条,可以为这种临时性效果,编写几组代码 行,而不是使用另一个控件。
3. 3 使用图形方法 2、图形方法的限制条件 用图 形方法创 建图 形是在代码 中进 行的,这 就意味着,必须 运行 应 用程序才能看到图 形方法的结 果。因而,对 于创 建界面的简 单 设 计 元素来说 ,图 形方法就不能代替图 形控件的作用。设 计 时 改变 图 形控 件的的外观 ,比修改并测试图 形方法的代码 容易。 每一种图 形方法都是绘 制输 出到窗体上、图 片框内或者是 Printer 对 象。为 了指示画出的位置,要给 图 形方法加上窗体或图 片框控件的 名字。如果省略了画出的对 象,Visual Basic 就认 为 是要画在代码 所 连 接的窗体上。例如,下列语 句画一个点,在: 名为 My. Form 的窗体上 :My. Form. PSet (500, 500) 名为 pic. Picture 1 的图 片框内 :pic. Picture 1. PSet (500, 500) 当前窗体上 :PSet (500, 500) 每一个绘 图 区都有自己的坐标 系,决定坐标 使用的单 位。另外, 每一个绘图 区都有自己的完整的一组图 形属性。 3、清除画图区 在任何时 候若想清除绘 图 区进 行重画,应 使用 Cls 方法。指定的绘 图 区以背景色 (Back. Color) 重画: [object. ]Cls 使用没有指定 object 的 Cls 方法,将清除该 代码 所连 接的窗体。
3. 3. 1 Pset方法 单个像素的控制,是简单的图形操作。PSet 方法用来 设置指定点处点亮一个指定着色的点,用法如下 [object. ]PSet (x, y)[, color] Object:对 象名,窗体或图 片框 x, y:是单 精度参数,所以它们 可以接受整数或分数的输 入。输 入可以是任何含有变 量的数值 表达式。 Color:显示点的颜色。如果没有包括 color 参数,PSet 将像素设置为前景色 (Fore. Color)。例如,下述语句在当 前窗体(代码所连接的窗体),My. Form,和 pic. Picture 1 上设置各种点: PSet (10. 75, 50. 33) My. Form. PSet (230, 1000) Picture 1. PSet (1. 5, 3. 2) 为 了“擦除”一点,只要把其颜 色设 置为 背景色即可: PSet (50, 75), Back. Color
3. 3. 2 Point 方法和 PSet 方法功能相反,其功能是获 取窗体或图片杠四返回指定位置处的颜色值。格式如下: Object. Point (x, y) Object:对象名,窗体或图片框。 (x, y):指定像素的坐标位置。
3. 3. 2 Point 方法 使用方法如下: Dim Point. Color as Long '变量说明,颜色返回值为长整型 Point. Color=Object. Point(x, y)‘获取图像指定位置的颜 色值 像素颜色值Point. Color是一个长整型的数值,使用 4个 字节,最上位字节的值为“ 0”,其他 3个字节依次为R,G, B,值为 0~255。 从Point. Color值分解出R值,G值,B值使用AND运 算符。算法为: Point. Color=Object. Point(x, y) R = Poin. Color And &HFF G = (Poin. Color And &HFF 00&) &HFF& B = (Poin. Color And &HFF 0000) &HFF 00&
3. 3. 3 Line 方法 画一个指定颜色的直线或长方形 object. Line [Step] (x 1, y 1) [Step] (x 2, y 2), [color], [B][F] Object:可选择的,对象名,窗体或图片框。 Step :可选的关键字,指定起点坐标,它们相对于由 Current. X 和 Current. Y 属性提供的当前图形位置。 (x 1, y 1):可选的。Single (单精度浮点数),直线或矩形的起点坐标。 Scale. Mode 属性决定了使用的度量单位。如果省略,线起始于由 Current. X 和 Current. Y 指示的位置。 Step :可选的关键字,指定相对于线的起点的终点坐标。 (x 2, y 2):必需的。Single (单精度浮点数),直线或矩形的终点坐标。 Color:可选的。Long (长整型数),画线时用的 RGB 颜色。如果它被省略, 则使用 Fore. Color 属性值。可用 RGB 函数或 QBColor 函数指定颜色。 B:可选的。如果包括,则利用对角坐标画出矩形。 F:可选的。如果使用了 B 选项,则 F 选项规定矩形以矩形边框的颜色填充。 不能不用 B 而用 F。如果不用 F 光用 B,则矩形用当前的 Fill. Color 和 Fill. Style 填充。Fill. Style 的缺省值为 transparent。
3. 3. 3 Line 方法 例如,下列语句可在窗体上画一条斜线。 Line (500, 500)–(2000, 2000) Visual Basic 所画出的一条直线,要包括第一个端点,而不是最后一 个端点。这种行为在从点到点画封闭曲线时是有用的。为了画最后一个 端点,应使用这种语法: PSet [Step] (0, 0)[, color] Step 关键 字 PSet、Line、和 Circle 方法使用以下语 法可指定一个或多个点(x, y), 可在每个点之前加上 Step 关键 字,用来指定要画出的点,是相对 最后 画出点的位置。Visual Basic 要将 x 和 y 的值 加到最后所画的点上。例 如,下边这 条语 句: Line (100, 200)–(150, 250) 等价于: Line (100, 200)–Step(50, 50) 在许多情况下,Step 关键字可免除持续不断地记录最后所画点位置 的负担。经常最为关心的可能是两点的相对位置,而不是它们的绝对位置。
3. 3. 3 Line 方法 绘制方框 可使用 Line 方法绘制并填充方框。下列示例画出一个方框, 其左上角为 (500, 500),每边长为 1, 000 缇 : Line (500, 500)–Step(1000, 0) Line -Step(0, 1000) Line -Step(– 1000, 0) Line -Step(0, – 1000) 然而,Visual Basic 提供了一个更简 单 的画方框的方法。 当在 Line 方法中使用 B 选 项 时 ,Visual Basic 把指定点作 为 矩形的对 角点,可画出一个矩形。所以,可用下列语 句, 代替上例中的四个语 句: Line (500, 500)–Step(1000, 1000), , B 注意:在 B 之前要有两个逗点,以表示色彩参数被省略了。
3. 3. 3 Line 方法 Fill. Style 和 Fill. Color 只要不改变 Fill. Style 属性的设置值,所画的方框将是 空的。(该方框使用缺省的 Fill. Style 和设置值来进行填 充 , 不 过 Fill. Style 的 缺 省 值 是 1 -透 明 。 ) 可 将 Fill. Style 属性改变为下表列出的任意设置值。 设置值 描述 0 实心的。可用 Fill. Color 属性设置的颜色填充方框。 1 透明(缺省值)。无论使用何种色彩,图形对象表现为空。 2 水平线。 3 垂直线。 4 向上的对角线。 5 向下的对角线。 6 十字交叉线。 7 对角交叉线。
3. 3. 3 Line 方法 将 Fill. Style 设 置为 0,就可以用 Fill. Color 属性的颜 色设 置,将方框填充为 实 心。是在 B 之后指定 F。(注意,没有 B 就不能用 F。)当使用 F 选 项 时 ,Line 方法将忽略 Fill. Color 和 Fill. Style 属性。使用 F 选 项 时 ,方框总 是被填 充为 实 心。下述语 句使用具有 Fore. Color 属性的一种实 心 图样 ,对 方框进 行填充。 Me. Line (500, 500)-Step(1000, 1000), , BF
3. 3. 4 画圆 Circle 方法可画出圆 形和椭 圆 形的各种形状。另外, Circle 方法还 可以画出圆 弧(圆 的一部分)和楔形饼 块 。使 用变 化的 Circle 方法,可画出多种曲线 。 为 了画圆 ,Visual Basic 需要给 出该 圆 的圆 心位置和它 的半径。画一个理想圆 的语 法是: [object. ]Circle [Step](x, y), radius[, color] Object:对 象名。 Step:任选项,在使用此关键字时,(x, y)表示为相对坐标, 即与由Current. X, Current. Y属性表示的当前位置的相对 坐标 。 (x, y):x参数和y参数是圆心的坐标。 Radius:半径。 例如,下面语 句将画出一个以 (1200, 1000) 为 圆 心、750 为 半径的圆 : Circle (1200, 1000), 750
3. 3. 4 画圆 这 个语 句产 生的精确作用,还 要依赖 于窗体的大小和 窗体的坐标 系。如果不知道窗体的大小,也就不能知道这 个 圆 是否可见 。可使用绘 图 区的标 尺属性,将该 圆 的圆 心置 于窗体的中心处 : Circle ((Scale. Width + Scale. Left) / 2, (Scale. Height + Scale. Top) / 2), Scale. Width / 4 此时 ,关于 Scale. Width 和 Scale. Height 所有应 知道的 是,它们 能帮助将图 形定位于窗体的中心。 注意 圆的半径通常是按照水平单位来指定的。如果坐标系 使用的水平单位和垂直单位是相同的话(按照缺省规定,应 当这样),可以不用考虑单位问题。但如果使用的是自定义 标尺,则水平单位和垂直单位可能对应不同的长度。上例中, 半径是用水平单位来指定的,可以保证圆的实际高度和实际 宽度相等。
3. 3. 4 画圆 画圆弧 为 了用 Circle 方法画出圆 弧,应 以弧度为 单 位,给 出 定义 弧线 start 和 end 的角度参数。画圆 弧的语 法是: [object. ]Circle [Step](x, y), radius, [color], start, end[, aspect] 如果 start 参数或 end 参数是负 数的话 ,Visual Basic 将画一条连 接圆 心到负 端点的线 。例如,下面的过 程将用 消除切片方式画出一个饼 。 Private Sub Form_Click () Const PI = 3. 14159265 Circle (3500, 1500), 1000, , –PI / 2, –PI / 3 End Sub 注意 将度换算成弧度的公式是将度数乘以 Pi/180。
3. 3. 5 画椭圆 圆的方位比,决定了圆是显得很圆(圆)还是被拉长(椭 圆)。Circle 方法的完整语法是: [object. ]Circle [Step](x, y), radius, [color], [start], [end] [, aspect] start 参数和 end 参数是可选的;但是,如果想省掉参 数,逗号是不能省的。例如:如果含有 radius 参数和 aspect 参数,省掉了 color、start、end 三个参数,则 必须加上四个连续的逗号,它表明这三个参数被省掉了。 Circle (1000, 1000), 500, , 2 aspect 参数指定了水平长度和垂直长度比。该 aspect 参数是正浮点数,这说明它既可以是整数表达式,也可以是 小数表达式,但不能是负数。该 aspect 参数较大时,椭 圆沿垂直轴线拉长;相反,该 aspect 参数较小时,则沿 水平轴线拉长。由于椭圆有两个半径—水平方向的 x 半径 和垂直方向 y 半径— Visual Basic 在 Circle 语句中只 使用了一个参数 radius 对应椭圆的长轴。如果 aspect 参数小于 1 的话,该 radius 半径指的是水平方向的 x 半 径,如果 aspect 参数大于或等于 1 的话,则 radius 指 的是垂直方向的 y 半径。
3. 3. 5 画椭圆 注意 aspect 参数指定的总是水平长度和垂直长度的实际物 理距离比,要保证这一点(即便用的是自定义标尺),半径 应以水平单位指定。 下列过程说明的是,不同的 aspect 参数值,Circle 方法是 如何决定对 radius 参数的使用的;是将它作为椭圆的 x 半 径,还是作为椭圆的 y 半径: Private Sub Form_Click () '画一个实心椭圆。 Fill. Style = 0 Circle (600, 1000), 800, , 3 '画一个空心椭圆。 Fill. Style = 1 Circle (1800, 1000), 800, , 1 / 3 End Sub
3. 3. 6 在任意位置绘制图形 使用 Paint. Picture 方法,可以在窗体、图片框 和 Printer 对 象 上 的 任 何 地 方 , 绘 制 图 形 。 Paint. Picture 方法的语法是: [object. ]Paint. Picture pic, dest. X, dest. Y[, dest. Width[, dest. Height[, src. X [, src. Y[, src. Width[, src. Height[, Raster. Op]]]]]]] object:对象名,指的是窗体、图片框或 Printer 对象。如果 object 被忽略了,则认为指定 的就是当前的窗体 Paint. Picture:方法名。 Pic:必须 参数,要绘 制到 object 上的图 形源, 是一个图 片对 象,它是由窗体或控件的 Picture 属性决定。
3. 3. 6 在任意位置绘制图形 Dest. X 、Dest. Y : 可选的。单精度值,指定在 object 上绘制 picture 的目标坐标(x-轴和y-轴)object 的 Scale. Mode 属性 决定使用的度量单位。 dest. Width 、 dest. Height:可选参数,用来设置在 object 目 标中该图象的宽度和高度。如果目标宽度或高度比源宽度 ( Src. Width)或高度(Src. Height)大或小,将适当地拉伸或压缩 picture 。如果该参数省略,则使用源宽度或高度。 src. X 、src. Y:可选参数,均为单精度值。用来定义 pic 中裁剪 区左上角的 x 和 y 坐标。 Src. Width:可选参数,单精度值。指示 pic 内剪贴区的源宽度。 object 的 Scale. Mode 属性决定使用的度量单位。如果该参数省 略,则使用整个源宽度。 Src. Height:可选参数,单精度值。指示 pic 内剪贴区的源高度。 object 的 Scale. Mode 属性决定使用的度量单位。如果该参数省 略,则使用整个源高度。
3. 3. 6 在任意位置绘制图形 Raster. Op:可选参数,用来定义当在目标 object 上绘图时, 在图片上执行的光栅操作(例如,AND 和 XOR)。
3. 3. 7 指定线宽 Draw. Width 属 性 用 来 指 定 图 形 方 法 输 出 时 线 的 宽 度 , Border. Width 属性用来指定直线和形状控件轮廓线的粗细。 下列过程将画出几条不同宽度的线。 Private Sub Form_Click () Draw. Width = 1 Line (100, 1000)–(3000, 1000) Draw. Width = 5 Line (100, 1500)–(3000, 1500) Draw. Width = 8 Line (100, 2000)–(3000, 2000) End Sub
3. 3. 8 指定线型 Draw. Style 属性指定用图形方法创建的线,是实线还是虚线。 形状控件的 Border. Style 属性的作用与 Draw. Style 属性相同, 但是仅应用于某些对象。 object. Draw. Style [= number] 常数 Vb. Solid Vb. Dash Vb. Dot Vb. Dash. Dot Vb. Invisible 设置值 0 1 2 3 4 5 描述 Vb. Inside. Solid 6 内收实线 (缺省值)实线 虚线 点线 点划线 双点划线 无线
3. 3. 9 Draw. Mode 的显示控制作用 Draw. Mode 属性决定,当把一个样 式画在另一个之上时 ,能 够取得什么结 果。尽管改变 Draw. Mode 属性,经 常会带 来一 些影响(尤其是彩色系统 ),但是当在一个空白或是纯 白色的 背景上,或者是在未定义 颜 色的背景上绘 制时 ,是没有必要使 用该 属性的。 设置值 描述 4 Not Copy 笔。画出相反的直线样式,不管该处原来的存在如何。 7 Xor 笔。显示出直线样式和现存显示的区别,参阅本节后面的解 释。用这种模式绘制对象两次,将精确地恢复该处原来的背景。 11 无操作,效果相当于关掉了绘画。 13 Copy 笔(缺省值)。使用直线的样式,不管该处原来的存在如何。
3. 3. 9 Draw. Mode 的显示控制作用 Xor 笔 对 于动 画来说 ,7 是 Draw. Mode 的一个有用的设 置值 。一 条线画出两次,就可精确还原该线画出之前地有的显示内容。 这 样 就可能创 建一个在背景上移动 却不会使其毁坏的对 象, 因为 在移动 时 ,可以还 原背景。大多数模式不能保护 原来的 背景。 例如,下列代码的作用是:每单击一下鼠标就移动一个圆, 无论圆 底下有什么,它都能被还 原。 Private Sub Form_Click () Fore. Color = 255 : Draw. Mode = 7 Circle (Current. X, Current. Y), 1000 Current. X = Current. X + 220 Current. Y = Current. Y + 220 Circle (Current. X, Current. Y), 1000 End Sub
3. 3. 9 Draw. Mode 的显示控制作用 Xor 笔的绘图模式(以及大多数其它的 Draw. Mode 设置值) ,是通过将绘图样式(被称作“笔”)中的各个像素与存在 区(被称作“目标”)中的相应像素进行比较的方式 作的。 在单色系统中,像素不是被打开就是被关闭,Visual Basic 进行一种简单的逻辑比较:如果笔和目标中有一个打开,而 不是两个同时都打开时,则使像素打开。 在彩色系统 中,每一个像素都赋 给 一个色值 。对 于 Draw. Mode 的 Xor 笔这 样 的设 置值 来说 ,Visual Basic 将对 笔和目标 里相应 的每一对 像素进 行比较 ,执 行二进 制(位 方式)的比较 操作。结 果决定生成像素的色值 。
3. 3. 9 Draw. Mode 的显示控制作用 使用 Xor 笔给直线像素设置二进制值 示例:橡皮条技术,程序可用于屏幕矢量化。在窗体上添加一个 Picture. Box控件,名称为Picture 1,利用Picture 1的Picture属性添加一幅 图。程序运行时,利用鼠标左键进行取点画线,鼠标右键结束画线。
3. 3. 10 窗体加载时创建图形 当窗体加载时为了在创建其上显示的图形, 应考虑将各种图形方法安放在 Form_Paint 事 件中。Form_Paint 图形在每一个绘画事件中 将自动地被重画。如果将图形放入 Form_Load 事 件 中 , 则 应 将 窗 体 上 的 Auto. Redraw 属性设置为 True。在这种情况 下,Form_Load 将显示窗体并画上图形。请 记住,在 Form_Load 事件中窗体是不可见的。 因为 Visual Basic 对于不可见窗体上的图形方 法不进行处理,除非 Auto. Redraw 被设置为 Ture,否则 Form_Load 事件中的图形方法将 被忽略。
3. 4 颜色 图像是通过光波映入眼中产生视觉。 光是电 磁波的一种形式,频 率为 105 --1025 Hz。 可见 光是其中很小部分(波长 为 780 nm 的红 光到波 长为 380 nm 的紫光)。 彩色视觉 属人眼的一种明视觉 人眼的视 网膜由感光细 胞覆盖。 感光细 胞包括: 杆状细 胞:能提供感光力强的单 色夜视 锥 状细 胞:能提供在较 高的光学亮度下的彩色视觉 锥状细胞将电磁光谱的可见部分分为三个波段红绿 和蓝,因此人类视觉为三色的。
3. 4. 1色彩空间 一束普通白光经 过 棱镜 显 示可以分解为 赤橙黄绿青蓝紫其中最基本的是Red、Green 、 Blue。 1、 加色法系统(RGB 三色原理) 任何颜 色可以用R G B 叠加产 生 R 0 ---255 G 0 ---255 B 0 ---255 RGB 为计算机的显示色
3. 4. 1色彩空间 2、减色法系统(CMYK 四色系统) 充满颜色时为黑色,没有颜色时为白色,使用 RGB 的补色做基本色青(cyan) 品(Magenta)和 黄(Yellow)。 CMYK是印刷业的标准。理论上前三种颜色可以组 成黑色,但考虑到印刷油墨黑度不够, 所以黑色就 独立出来自成一色,以保障印刷质量。 CMYK 空间比RGB 空间小,所以彩色打印效果远 不如显示。 例如: 白(0 0 0 0) 青(100 0 0 0) 蓝(100 0 0) 品(0 100 0 0)
3. 4. 1色彩空间 3、HSI 模式(HSV,HSB模式) 艺术家使用的模式 H(Hue)色调、S(Saturation)饱和度、 B (Brightnees) 亮度 HSB 是人类容易理解的模式,但由于设备 限制,显示时要转为RGB ,打印时要转为 CMYK。
3. 4. 1色彩空间 4、 LAB 模式 与HSI 模式类似它所用的参数是光强和 色度。L为光强度,A保存从绿色到紫色所 的色彩信息;而B 保存从蓝色到黄色所对应 的色彩信息。单个A 或B 无意义只。有A 、 B 结合才有意义。 LAB 模式所的颜色空间最大,其他几个 颜色空间都是它的子集。
3. 4. 1色彩空间 5、YIQ 模式 美国国家制式委员会提出的NTSC 彩色 传输制式使用YIQ 三刺激值它与RGB 的关 系是: 其中Y 为亮度,I、Q 为色度信息。 这种制式的好处Y、 I 、Q、 信号的相关性 小便于传输。
3. 4. 1色彩空间 6、YUV 模式 我国和一些西欧国家采用PAL制式。 Y 为亮度,U 和V 为色度。 好处: (1)亮度信号Y 与色度信号U 和V 相互独立。 使使黑白电视能接受彩色电视信号 (2)可以利用人眼的特性来降低数字彩色图象所需的存储容 量。人眼对彩色细节的分辨能力远比亮度细节的分辨能力低。 它与RGB 的关系是:
3. 4. 2 在VB程序中使用颜色 对 于所有的颜 色属性和图 形方法,Visual Basic 使用固定的系统 。每种颜 色都由一个 Long 整数表示,并且在指定颜 色的所有上下文 中,该 数值 的意义 相同。 1、在运行时指定颜色 在运行时有四种方式可指定颜色值: v使用 RGB 函数 v使用 QBColor 函数,选择 16 种 Microsoft Quick. Basic(R) 颜色中的一种。 v使用在“对象浏览器”中列出的内部常数之一。 v直接输入一种颜色值。
3. 4. 2 在VB程序中使用颜色 2、使用 RGB 函数 可以用 RGB 函数来指定任何颜色。 (1)对三种主要颜色(红、绿、蓝)中的 每种颜色,赋给从 0 到 255 中的数值,0 表示亮度最低,而 255 表示亮度最高。 (2)用红-绿-蓝的排列方式,将三个数值 输入给 RGB 函数。 (3)将结果赋给颜色属性或颜色参数。
3. 4. 2. 1 使用颜色属性 Visual Basic 中的许多控件,有决定控件显示 颜色的属性。请记住,这些属性中有些也适用于 不是图形的控件。下表描述了这些颜色属性。 属性 描述 Back. Color 对用于绘画的窗体或控件设置背景颜色。如果在绘图 方法进行绘图之后改变 Back. Color 属性,则已有的图 形将会被新的背景颜色所覆盖。 Fore. Color 设置绘图方法在窗体或控件中创建文本或图形的颜色。 改变 Fore. Color属性不影响已创建的文本或图形。 Border. Col or 给形状控件边框设置颜色。 Fill. Color 为用 Circle 方法创建的圆和用 Line 方法创建的方框, 设置填充颜色。
3. 4. 2. 1 使用颜色属性 1、使用定义的常数 当使用“对 象浏 览 器”中列出的内部常数 时 ,没有必要去了解这 些常数是如何产 生 的。另外,这 些内部常数也无须 声明。例 如:无论 什么时 候想指定红 色,作为 颜 色 参数或颜 色属性的设 置值 ,都可以使用常 数 vb. Red: Back. Color = vb. Red
3. 4. 2. 1 使用颜色属性 2、直接使用颜色设置值 正常的 RGB 颜色的有效范围,是从 0 到 16, 777, 215 (&HFFFFFF&)。每种颜色的 设置值(属性或参数)都是一个四字节的整 数。对于这个范围内的数,其高字节都是 0, 而低三个字节,从最低字节到第三个字节, 分别定义了红、绿、蓝三种颜色的值。红、 绿、蓝三种成分都是用 0 到 255 (&HFF) 之 间的数表示。
3. 4. 2. 1 使用颜色属性 3、用十六进制数&HBBGGRR&来指定颜色 BB 指定蓝 颜 色的值 ,GG 指定绿 颜 色 的值 ,RR 指定红 颜 色的值 。每个数段都 是两位十六进 制数,即从 00 到 FF。中间 值 是 80。因此,下面的数值 是这 三种颜 色 的中间值 ,指定了灰颜 色: &H 808080& 将最高位设置为 1,就改变了颜色值的 含义:颜色值不再代表一种 RGB 颜色,而 是一种从 Windows“控制面板”指定的环 境范围颜色。这些数值对应的系统颜色范围 是 从 &H 80000000 到 &H 80000015。
3. 4. 2. 1 使用颜色属性 4、使用系统颜色: 在应用程序中设置控件或窗体的颜色时,可以 不指定颜色值,而用操作系统指定的颜色。如果 指定了操作系统的颜色,当应用程序的用户改变 计算机上的系统颜色值时,应用程序将自动地反 映用户所指定的颜色值。 每一种系统 颜 色,既有所定义 的常数也有直 接的颜 色设 置值 。对 系统 颜 色来说 ,其直接颜 色设 置值 的高位字节 与普通 RGB 颜 色的高位字 节 是不同的。对 于 RGB 颜 色来说 ,其高位字节 为 0,而对 于系统 颜 色来说 ,其高位字节 为 80, 剩下的数字则指的是某一特定的系统颜色。例如: &H 80000002& 这 个十六进 制数,是用来指定一 个活动 窗口的标题颜 色。
3. 5 使用图片对象 在某些方面,Picture 对象与 Printer 对象很相似— 它不可见,但很 有用。可将图片对象想象为一个不可见的图片框,作为图象的一个显示 区使用。例如,以下代码装入一个带位图的图片对象,使用该位图可设 置图片框控件的 Picture 属性: Private Sub Command 1_Click() Dim obj. Pic As Picture Set obj. Pic = Load. Picture("Butterfly. bmp") Set Picture 1. Picture = obj. Pic End Sub Picture 对象支持位图,GIF 图象,JPEG 图象,元文件和图标。可 用图片对象数组,把一系列图形保存在内存中,而不必用包含多个图形 框或图象控件的窗体。当制作动画或其它应用程序时,在要求图象快速 变换的地方,这是非常有用的。数组在模块级声明: Dim obj. Pics(1) As Picture 将下列代码添加到 Form_Load 事件中: 将位图加载到图片对象数组。 Set obj. Pics(0) = Load. Picture("Butterfly 1. bmp") Set obj. Pics(1) = Load. Picture("Butterfly 2. bmp")
3. 5 使用图片对象 在 Windows API 中可使用位图、图标或元文件做许多 事情,不过图片对象已做了其中大部分事情。这就是说,如 果有可能的话,使用图片对象来代替 Windows API 比较好。 而且,图片对象能使用 jpeg 和 gif 文件,而 Windows API 则不行。 Picture. Handle 和 Picture. Box. h. DC 之间没有直接联系。 h. DC 属性是操作系统提供给图片框控件的设备上下文的句柄。 Picture 对象的 Handle 属性,实际上是图片对象所含 GDI 对象的句柄。 现在有两种完全不同的方法可在窗口中画图。可在对象 的 h. DC 上使用 Bit. Blt 或 Stretch. Blt,也可在图片对象或属性 中 使 用 Paint. Picture 方 法 。 若 有 图 象 控 件 , 则 只 能 用 Paint. Picture,因为图象控件没有 h. DC。
3. 6 使用API函数 这 些内容同样 可以从API文本游览 器中拷贝 过 来。这 些 结 构中的变 量名可随意改动 ,而不会影响结 构本身。也就是 说 ,这 些成员 变 量都是虚拟 的。如,POINTAPI结 构可改为 如下∶ Public Type POINTAPI My. X As Long '点在X坐标 (横坐标 )上的坐标值 My. Y As Long '点在Y坐标 (纵 坐标 )上的坐标值 End Type 不过 ,一般来讲 ,是没有这 种必要的。结 构本身是一 种数据类型,因此,使用时 必须 声明具体变 量为 该 结 构型, 才能在程序中真正使用到该 结 构。结 构的声明方法和其他数 据 的 声 明 方 法 一 样 , 如 , 以 下 语 句 把 变 My. Point声 明 为 POINTAPI结 构类型∶ My. Point As POINTAPI
3. 6 使用API函数 所谓API本来是为C和C++程序员写的,是 一种函数,他们包含在一个附加名为DLL的 动态连接库文件中。用标准的定义来讲,API 就 是 Windows的 32位 应 用 程 序 编 程 接 口 Application Programming Interface(API),是 一系列很复杂的函数,消息和结构,它使编 程人员可以用不同类型的编程语言编制出的 运 行 在 Windows 95和 Windows NT操 作 系 统 上的应用程序。
3. 6 使用API函数 结 构是C和C++语 言中的说 法。在VB中一般称为 自定义 数据类型。 在API领 域里,我更喜欢 把它叫做结 构,因为 API各种结 构类型根本不 是我定义 (自定义 )的。在VB中,API结 构同样 由TYPE. . . . END TYPE语 句来定义 。如,在API中,点(Point)结 构的定义 方法如下: Public Type POINTAPI X As Long '点在X坐标 (横坐标 )上的坐标值 Y As Long '点在Y坐标 (纵 坐标 )上的坐标值 End Type 又如,API中矩形(Rect)结 构的定义 如下∶ Public Type RECT Left As Long '矩形左上角的X坐标 Top As Long '矩形左上角的Y坐标 Right As Long '矩形右下角的X坐标 Bottom As Long '矩形右下角的Y坐标 End Type
3. 6 使用API函数 引用结 构中的成员 变 量也十分简 单 ,在结 构名后面加 上一个".", 然后紧 接着写要引用的成员 变 量即可。这 很象 VB中的引用一个对 象的某个属性。如,假如我们 把上面已 经 声明的My. Point结 构中的X变 量的值 赋 给 变 量Temp&则 代 码 如下∶ Temp&=My. Point. X 但,特别注意的是,千万不要认为上例中的My. Point是 一个值。它不是值,而是地址(指针)。值和地址是完全不同 的概念。结构要求按引用传递给WINDOWS函数,即所有 API函 数 中 , 结 构 都 是 按 By. Ref传 递 的 (在 Declare语 句 中 By. Ref是默认型)。对于结构的传递,你不要试图采用By. Val, 你将一无所获。由于结构名实际上就是指向这个结构的指针( 这个结构的首地址),所以,你也就传送特定的结构名就可以 了。由于结构传送的是指针,所以函数将直接对结构进行读 写操作。这种特性很适合于把函数执行的结果装载在结构之 中。
3. 6 使用API函数 启动 VB,新建一个项 目,添加一个命令按钮 ,并把下面的代码 拷 贝 到代码 段中,运行它。 Private Declare Function Get. Cursor. Pos Lib "user 32" (lp. Point As POINTAPI) As Long Private Type POINTAPI ‘定义 点(Point)结 构 X As Long '点在X坐标 (横坐标 )上的坐标值 Y As Long '点在Y坐标 (纵 坐标 )上的坐标值 End Type Sub Print. Cursor. Pos( ) Dim dl AS Long Dim My. Point As POINTAPI dl&= Get. Cursor. Pos(My. Point) '调 用函数,获 取屏幕鼠标 坐标 Debug. Print "X=" & Str(My. Point. X) & " and " & "Y=" & Str(My. Point. Y) End Sub Private Sub Command 1_Click() Print. Cursor. Pos End Sub
3. 6. 1绘图设备环境 Visual Basic绘图与Windows. API绘图不同。 Visual Basic绘图功能比较比较简单,主要是 通过几种图形方法(比如Pset、Line和Circle 等 ) 以 及 图 形 控 件 ( 如 Picture. Box控 件 和 Image控件)完成绘图操作,绘制的图形包含 Fore. Color、Fill. Color和Fill. Style等绘图属性。 而Windows. API绘图,则是在设备环境中绘制 图形。在Windows的绘图过程中,经常使用 的绘图对象包括以下几种:
3. 6. 1绘图设备环境 设 备 (Device): 可以显 示窗口、打印页 面或其他的可获 取设 备 环 境的 输 出设备 。 设 备 环 境(Device Context):可用来确定对 设 备 进 行绘 图 和各种参 数,并定义绘图 的坐标 系统 。 画笔(Pen):定义 画线 的方式,主要属性包括宽 度、颜 色和线 型。 画刷(Brush):定义区域填充的方式。画刷可以是立体的、带阴影的, 也可以用位图进 行填充。 绘图 属性:定义有画笔和画刷绘制图形如何与设备中已存在的图形结合. 剪裁区:定义设备环 境中可以实际绘 制的区域。 调 色板:定义 窗口中的可见颜 色。 路径(Path):定义 一个可被绘 制式填充的复杂 形状。 设备环境(Device Context), 简称DC,是Windows的一种对象, 可用来在一个窗口或设备上绘图。对某个设备的图形和文本输出都是通 过设备环境进行的。Windows提供了一组预定义的设备环境,可用于窗 口和设备绘图。当需要绘图时,可以从该组中申请一个设备环境,定义 其属性,然后通过它进行绘图。绘图完毕后,如果不需要该设备环境了, 则应将其释放。如果不使用预定义的设备环境,也可以自己建立设备环 境,还可以规定某一类中的每个窗口都有自己的设备环境,或者让某一 类的所有窗口共用一个设备环境。
3. 6. 1绘图设备环境 1、设备环 境的分类 大多数的Windows绘 图 函数通常都需要设 备 环 境句柄作 为 其中的一个参数。设 备 环 境是Windows的内部数据结 构,根据建立和 获 取的方法的不同,可以把设备环 境分为 以下3类: (1)专 用设备环 境 当一个窗口属于一个具有指定样 式的类进 ,它将拥 有一个专 用的设 备 环 境 。 这 里 的 “指 定 样 式 ”是 指 CS_OWNDC、 CS_PARENTDC或 CS_CLASSDC。当属于CS_CLASSDC时 ,一个设 备 环 境被类中所有的 窗口共享。而CS_PARENTDC样 式窗口的设 备 环 境与其父窗口相同。 如果窗口属于CS_OWNDC样 式,则 每个窗口都有自己的设 备 环 境。 CS_OWNDC样 式窗口的优 点是,当向窗口绘 图 时 ,设 备 环 境总 是可 用的,Windows系统 不能以任何方式修改它;缺点是,每个窗口都需要 一 定 的 内 存 开 销 。 Visual Basic中 的 窗 体 和 图 片 框 控 件 就 具 有 CS_OWNDC样 式。 (2)缓 存设备环 境 为 了节 省资 源,Windows提供了一块 内部设 备 环 境缓 存,它可以被 所有应 用程序和窗口共享。 (3)自定义设备环 境 用户 可以根据需要,建立自己的设备环 境,这 称为 自定义设备环 境。
3. 6. 1绘图设备环境 属性 默认值 背景色(Background Color) 背景模式(Background Mode) 不透明(Opaque) 位图(Bitmap) 无(None) 画刷(Brush) 白色画刷(White Brush) 画刷原点(Brush Origin) 2、 设 备 环 境 的 属 性 白色(White) 0,0 剪载区(Cliping Region) 整个窗口或设备表面 调色板(Coloe Palette) 默认调色板(Default Palette) 画笔位置(Pen Position) 0,0 绘图模式(Drawing Mode) R 2_COPEYPEN 字体(Font) 系统字体(System Font) 字间距(Intercharacter Spacing) 0 映射模式(Mapping Mode) MM_TEXT 画笔(Pen) 黑色(Black) 多边形填充模式(Polygon-Filling Mode) ALTERNATE 伸缩模式(Streching Mode) BLACKONWHITE 文本颜色(Text Color) 黑色 视口原点(Viewport Origin) 0,0 视口范围(Viewport Extents) 1,1 窗口起点(Window Origin) 0,0 窗口范围(Windows Extents) 1,1
3. 6. 1绘图设备环境 3、设备环 境的获 取和释 放 获取设备环境的操作通过Get. DC或Get. DCEx函数来实现, 而释放设备环境的操作通过Release. DC函数来完成。 (1)Get. DC函数用于获取指定窗口的设备环境,其在VB中 的声明为: Public Declare Function Get. DC Lib "user 32" _ Alias "Get. DC" (By. Val hwnd As Long) As Long 其中,参数hwnd为要获取指定设备环境的窗口的句柄, 如果为 0,则获取整个屏幕的DC。如果函数调用成功,则返 回指定窗口 作区的设备环境;如果失败,则返回Null。
3. 6. 1绘图设备环境 (2)Release. DC函数用于释放设备环境,使得该设备环境可 供其他应用程序使用,其在VB中的声明为: Public Declare Function Release. DC Lib "user 32" Alias "Release. DC"_ (By. Val hwnd As Long, By. Val hdc As Long) As Long 其中,参数hwnd为要释放的指定设备环境的窗口的句柄。 HDC是要释放的设备环境的句柄,如果函数调用成功,则返 回值为 1,反之为 0。 每次调用Get. Window. DC和Get. DC函数检索公用设备之 后 , 必 须 调 用 Release. DC函 数 来 释 放 设 备 环 境 。 面 由 Create. DC建立的设备环境不能用Release. DC来释放,只能 用 Delete. DC函数来删除。 实例:首先在窗体上添加一个图片框、文本框、框架和4个 命令按钮控件
3. 6. 2画笔 画笔是用来画几何图形的GDI对象,当在设备上画一个矩 形或多边形时,矩形或多边形的边框就是用画笔画出来的。 WIN 32提供了3种类型的画笔: (1)标准画笔有3个属性,即颜色、宽度和线型。其中,颜色用 来定义所画线条的RGB颜色,实际使用的颜色与设备有关, GDI可以自动选择与设备最近的颜色。 (2)装饰画笔是一种扩展画笔,其宽度总是为一个逻辑单位, 可以是实线,也可以是标准的虚线和点线,还可以是由用户 定义图样的虚线或点线。 (3)几何画笔也是一种扩展画笔,可以是各种宽度、线型和 点线图样,并带有增强控制,可以控制两个线条的边接方式。
3. 6. 2画笔 1、创建画笔 众所周知,画家在开始作画前,都要准备好画笔。两样, 在用API作图时,则需要使用API函数建立所需要的画笔。为 了在设备环境中使用绘图对象,必须先把指定的绘图对象选 入设备环境中,这类似于在绘画时选择画笔。把绘图对象选 入设备环境所使用的函数是Select. Objec。建立和获取画笔的 API函数有: Create. Pen 建立画笔 Create. Pen. Indirect 根据LOGPEN结构建立一个画笔 Ext. Create. Pen 建立扩展画笔 Select. Object 把画笔选入设备环境 下面详细介绍这几个函数
3. 6. 2画笔 (1)Create. Pen函数用于使用指定的样式、宽度和颜色,建立一个逻辑 画笔。在VB中的声明为: Public Declare Function Create. Pen Lib "gdi 32" _ Alias "Create. Pen" (By. Val n. Pen. Style As Long, _ By. Val n. Width As Long, _ By. Val cr. Color As Long) As Long 其中:n. Pen. Style用于指定画笔的样式,可以是下列常量之一: PS_SOLID:实线画笔。 PS_DASH:虚线画笔(n. Width必须为 1)。 PS_DOT:点线画笔(n. Width必须为 1)。 PS_DASHDOTDOT:点线画笔(n. Width必须为 1)。 PS_NULL:画笔不能画图。 PS_INSIDEFRAME:画笔在有椭圆,矩形,圆角矩形,扇形图及弦等 生成的封闭对象框中画图;用该画笔所画线的尺寸将根据画笔的宽度进 行收缩,经便能完全适合封闭对象;该值只能用于几何画笔。
3. 6. 2画笔 参数n. Width指定画笔的宽度,以逻辑单位表示,如果 该参数为 0,则画笔的宽度为 1个像素。 参数cr. Color指定画笔的RGB颜色。 如果函数调用成功,则返回指向新画笔的句柄,该画笔 随后就可以被设备使用;如果调用不成功,则返回 0值。 建立画笔之后,可以通过调用Select. Object函数将它选 入一个设备环境中,之后即可用它来画线。当建立的画笔不 再需要时,应调用Delete. Object函数将其删除。 需要说明的是,n. Width参数与n. Pen. Style参数互相关联。 NWidth的值为 0,则用该画笔绘制的直线将是为 1个像素宽, 无论当前的变换方式是什么。如果n. Width的值大于1,则 n. Pen. Style参 数 必 须 是 PS_SOLID、 PS_NULL或 者 PS_INSIDEFRAME。
3. 6. 2画笔 (2)Create. Pen. Indirect函数
3. 6. 2画笔 (3)Ext. Create. Pen函数用于建立一个扩展画笔,其在VB中的声 明为: Public Declare Function Ext. Create. Pen Lib "gdi 32" _ Alias "Ext. Create. Pen" (By. Val dw. Pen. Style As Long, _ By. Val dw. Width As Long, _ lplb As LOGBRUSH, _ By. Val dw. Style. Count As Long, _ lp. Style As Long) As Long 其中,参数dw. Pen. Style用于指定画笔的类型、样式、 笔尖形状及连接属性,它是下列值的组合(Or操作)。 笔的类型可以下列值之一: PS_ALTERNATE:几何画笔。 PS_COSMETIC:装饰画笔。
3. 6. 2画笔 笔的样式可以是下列值之一: PS_ALTERNATE:Windows NT,画笔可以设置其他像样 素(仅用于装饰画笔)。 PS_SOLID:实线画笔。 PS_DASH:虚线画笔。 ' ------PS_DOT:点线画笔。 '. . . . PS_DASHDOT:点划线画笔。 ' _. _ PS_DASHDOTDOT:双点划线画笔。 ' _. . _ PS_NULL :空画笔。 PS_USERSTYLE :用于Windows NT,画笔使用用户提供 一个样式数组。 PS_INSIDEFRAME:实线画笔,可以在任何图形设备接口 (GDI)的绘图函数中使用
3. 6. 2画笔 只有几何画笔才需要指定笔尖形状。笔尖开关可以取下列值 之一: PS_ENDCAP_ROUND :圆形笔尖。 PS_ENDCAP_FLAT :平面笔尖。 PS_ENDCAP_SQUARE :方形笔尖。 只有几何画笔才需要指定连接方式。连接方式可以限下 列值之一: PS_JOIN_BEVEL:斜切连接。 PS_JOIN_MITER:在斜接极值的范围内进行斜角连接, 如果超过斜接极值,则进行斜切连接,斜接极值用 Set. Miter. Limit函数设置。 PS_JOIN_ROUND:圆滑连接。
3. 6. 2画笔 参数dw. Width指定画笔的宽度。 参数lplb指向LOGBRUSH结构。 参数dw. Style. Countr用于指定lp. Style数组的长度,以 DWORD为 单 位 。 Dw. Pen. Style参 数 的 值 不 是 PS_USERSTYLE,则该值必须为 0。 参数lp. Style是一个DWORD类型的数组,用来指定用户 定义的画笔样式。数组的第一个指标是第一段虚线的长度, 第二个指标是第一段空格的长度。等等。
3. 6. 2画笔 (4)Select. Object函数可以选择一个对象,放到指定的设 备环境中,用新对象替换先前的相同类型的对象。其在VB中 声明为: Public Declare Function Select. Object Lib "gdi 32" Alias _ "Select. Object" (By. Val hdc As Long, By. Val h. Object As Long) As Long 其中,参数h. DC是设备环境的句柄。参数h. Object是被 选择的对象的句柄。该对象可以是位图、画笔、字体、笔或 者区域,这些对象必须由指定的函数建立。
3. 6. 2画笔 2、删除画笔
68960ce6257fcf56d5c4094bd4bc5cba.ppt