使用Canvas对象的属性

上传人:大米 文档编号:557924436 上传时间:2023-08-21 格式:DOCX 页数:23 大小:84.01KB
返回 下载 相关 举报
使用Canvas对象的属性_第1页
第1页 / 共23页
使用Canvas对象的属性_第2页
第2页 / 共23页
使用Canvas对象的属性_第3页
第3页 / 共23页
使用Canvas对象的属性_第4页
第4页 / 共23页
使用Canvas对象的属性_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《使用Canvas对象的属性》由会员分享,可在线阅读,更多相关《使用Canvas对象的属性(23页珍藏版)》请在金锄头文库上搜索。

1、第 6 章 使用图形和多媒体 图形和多媒体元素可为应用程序增添光彩。C+Builder提供了几种为应用程序引入这种功 能的方法。要加入图形元素,可以在设计时插入一幅预先绘制好的图片,可在设计时使用图 形控件创建它们,也可在运行时动态地画出它们。为添加多媒体功能,C+Builder提供了 一些可播放声音与视频剪辑的特殊组件。6.1 图形编程概述VCL图形组件封装了 Windows图形设备接口(GDI),使得在Windows程序设计中添加图形 变得很容易。在C+Builder应用程序中绘制图形,应在对象的画布(canvas)中绘制,而 不是直接在对象中绘图。画布是对象的属性,同时它本身也是对象。画

2、布对象的一个主要优 点是它能够有效地处理资源并能管理设备场境,所以应用程序可以使用相同的方法在屏幕、 打印机、位图或图元文件中绘图。画布只在运行时有效,所以用户必须通过编写代码来使用 画布。注意因为 TCanvas 是 Windows 设备场境的一个封装的资源管理器,所以也可在画布中使用所 有的 WindowsGDI 函数。画布的 Handle 属性是设备场境的处理指针。图形在应用程序中如何 显示依赖于拥有所用画布的对象类型。若直接在控件的画布上绘图,则该图会立即显示。若 绘制诸如 TBitmap 画布的非屏幕图象,则该图不会显示,直到将其复制到控件的画布中时才 会显示。也就是说,当绘制位图并

3、将其赋给图形控件时,仅当控件有机会处理其 OnPaint 消息时才会显示该图。当处理图形时,通常会遇到绘图(drawing)和画图(painting)两个名词。绘图是编写代码来创建一个单一的、特定的图形元素(如线条或形状)。在程序中,通 过调用画布的绘图方法来告诉对象如何在其画布的特定位置上绘出特定的图形。画图是创建对象的整个外观。画图通常会使用到绘图。也就是说,在响应OnPaint事件 时,对象通常要绘出几个图形。例如,一个编辑框通过绘出一个矩形,然后再在内部绘出许 多文本来画出自身。而一个形状控件通过绘制单一的图形来画出自身。在本章开始的示例中展示如何绘出不同的图形,但它们都是在响应OnP

4、aint事件。下列各节 将说明如何在响应其他事件时进行同样的绘图操作。6.1.1 刷新屏幕有时,Windows会决定刷新屏幕上的对象外观,为此它生成WM_PAINT消息,这个消息会使 VCL对象调用OnPaint事件。当使用Refresh方法时,VCL会调用已编写的所有对象的OnPaint 事件处理程序。OnPaint事件自动生成的缺省名为FormPaint。有时可能需要使用Refresh方法来刷新组件 或窗体。例如,可能要在窗体的OnResize事件处理程序中调用Refresh方法以便刷新图形, 或在画窗体的背景图时调用它。虽然有些操作系统会自动刷新窗口中无效的客户区部分,然而Windows

5、不会这样做。在 Windows 操作系统中绘制在屏幕上的东西都是永久的。当窗体或控件变得模糊不清时,例如 拖动窗口,当窗体或控件重新显示时,必须自己重画模糊的区域。有关WM_PAINT消息的详 细说明,请参阅 Windows 的联机帮助。若使用 TImage 控件,画图和刷新 TImage 中的图形由 VCL 自动处理。在 TImage 中绘图会创 建一个固有的图像。因此不需要自行刷新其包含的图像。与此相反,TPaintBox的画布是直 接对应于屏幕设备的,因此任何在PaintBox的画布中绘制的东西都是临时性的。其实大部 分的控件都是这样,包括窗体自身也是如此。因此,若在 TPaintBox

6、 的构造函数中绘图或画 图,则需要把相同的程序代码加到OnPaint事件处理程序中,以便每次客户区无效时能重画 其图像。6.1.2 图形对象的样式VCL提供了表6-1中所列出的图形对象。这些对象都有可在画布上绘图的方法以及加载和保 存图形文件的方法,这些方法在6.1.5节和6.1.8节中说明。表6/图羽对象类型風 性说 明用于保存圈形比图惟,要添加额外的圏形文件格式,使用Picture Register方法“用此方法 珂处理任憲的文件,如在图橡控件中启示图懈Bitmap一个很冇用的團形对象,用了创建、处理I第放、滚动、旋转和画出以及将图惟作為文件存放在餓盘中=制建位图的拷贝很快.因为只氐垣制其

7、旬輛而不是整图惜“Clipboanl可用于存放任何文本或图那的容器,立本或图形可从/到应用程序剪切、复制或粘贴。使用斡贴扳对象可根抵遇出的格式来耿得和恢皇数据:处理卷老计敎以及打歼和关诃前贴板;管 理和处理舸贴板中对象的格式gii代表从更iiidavq图标文件(:ICO丈件中載入的值Metafile用廷存放图元文件,图元丈件记录构造图惟所需要的操件而不定嗣惟的实际傑素“罔元丈件易丁改礎其缩放比例而不会去失图惟的细节.井且谨常比位图需要的内存更少.特別是 对高分辨率前设备.如打印机“熬而,图元立件的绘制速度比不上勺立图,在控制或精度比速 度更垂要时可使用图元文叫6.1.3 画布的通用属性和方法表

8、6-2列出了画布(Canvas)对象的通用属性,表6-3列出了可用的方法。详细的属性和方 法,请参阅联机帮助中的 TCanvas 组件。表乩2画布对象的谨用届性FontBrushPenPenPosPixels指定在图傑中耳入丈本时使用的字体.设蜀TFant象鬧辰性以指定字怵.体的範色、 犬小和样式决定画布在填充图形形状和背景时使用的価色和图案设直TBm山对象的屈* *以指定在填 禿両布的空问时使用的颇色,舞式或位图指定画布在绘制塔糸和边框时使用的画笔类型。设畫TPi对象的屁性以指定画笔的颇色、 样式、宽度和模式指岀画笔当新绘制的僅養指出号前的ClipRecr中像圭的兢色ArcChordCopy

9、R.ectDrawEllipseFillRectFloodFillFiaineRecTLineToMceToPiePclygouPoly LineRectangleRcundRectSTierchDiJWTextHeight TextWidthTextOutTextRect6-3可用方法列表沿若描圆的周边在指定拒砂区域中绘制弧带蛉制由直践和带園相交而咸的一个封刀形状将图形的一部分从另一牛画布亘制而来在画布的坐标 0 y)上堆出由Gf&phic参数指定的團形对象在画石J拾定知形区域中蚣出梃圆形使用当前的画刷在画布上填充蛤定的矩形区域使用当前的画刷在画布上填充给定的区域绘出拒形井使用画布的画刷给制

10、其边界从PenPc.到由雯和y所给定的点绘出一条线.井把Per.Po3移到:心v)点古把岁前的绘制位K移到 E 2 点上在画布上绘出由 E 7和(x2, y2)确定的矩形所定出播圆册区域的饼图在画布上绘出一系列的壤.串起所传入的各个点井从最后一点到第一个点间 遶出一条壤来宾成整亍图形使用当前的画笔在画布上绘出一系列的践以琏接Point传入的各点使用以点心,小为左上角以陞(x2. y2 :为右聾角绘制的一个汕形愷用RectansleSqPen出矩畛噪用画刷来以充團形用両芮的边角绘制建形在画布上绘制H1形収便團慷适合錨定的矩形,图形可匪需要更改其大小和比率 以迢合所蛤定的拒形分刊返回字符率愷用字体

11、的洁度和夷弟高度包含娃与钱之间杓间距在画店上写出字符串.以点 5 7)为起点.再把PenPos更新为字符串的尾端在限定的区械肉写出字捋串.在区域之外的任何字特串不会显示出来画笔本身有4个可更改的属性:Color、Width、Style和Mode。Color属性:更改画笔的颜色。Width属性:更改画笔的宽度。 Style属性:更改画笔的样式。Mode属性:更改画笔的模式。这些属性的值决定了画笔如何更改线条像素。在缺省时,每个画笔开始时都是黑色,宽度为 1 个像素、样式为实线,模式为复制,它会覆盖画布上已存在的任何东西。(1) 更改画笔的颜色在运行时可将画笔的Color属性改为任何所需的值以改变

12、画笔的颜色。画笔的颜色决定了画 笔在绘制线条时的线条颜色,包括用来绘制形状边框的线条以及其他线条和折线。要更改画 笔的颜色,可设置画笔的Color属性值。要让用户选择画笔的新颜色,可把颜色网格放到画笔的工具栏中。颜色网格可设置前景和背 景的颜色。对无网格的画笔样式,必须考虑用来描绘线与线之间的空隙的背景色。背景色是 由画刷的颜色属性而定。因为用户是通过在网格上单击来选择新的颜色,所以下列代码会在响应OnClick事件时更改 画笔的颜色:void faatoall Ttornl: PenColorClickiTObject *SenderCanvas- ?en-Color = FenCc1or-

13、imortgroundCo Lar;(2) 更改画笔的宽度画笔的宽度以像素决定所绘制线条的宽度。当宽度大于1时,不管画笔Style属性值为何, Windows95总是绘制实线。要更改画笔的宽度,设置画笔的Width属性。假定在画笔的工具 栏上有一个用于设置画笔宽度的滚动条,并假定需要更新滚动条旁的标签以便给用户提供反 馈信息。使用滚动条的位置来决定画笔的宽度,每当位置更改时就更新画笔的宽度。下列代码说明了如何在滚动条的 OnChange 事件中处理上述任务:iraid _faatcall IFrT.I: ; PeEWidthChngeTijbject *BeriderCanvas*th = P

14、enWidth-Poy:tion;7 set tne pendirectlyPcnSize-Capicn = IntTo$zr (FenWidL.ii-11l-an) ; / convert to string(3) 更改画笔的样式通过画笔的 Style 属性可设置实线、虚线、点线等样式。注意 Windows95 不支持线条宽度超 过一个像素时的虚线或点线样式,并会把它们变成实心的,而不管所给定的样式。设置画笔 属性是不同控件共享相同事件处理程序的最好示例。检查Sender参数决定到底是哪个控件 获得事件。要创建工具栏上 6 个画笔样式按钮的单击事件处理程序,可按下列步骤:1)全部选定这6个画

15、笔样式按钮,并在对象观察器中选择Events|OnClick事件,并在 Handler列中输入SetPenStyle。C+Builder产生一个空的单击事件句柄SetPenStyle,并 将其分配给所有 6 个按钮的 OnClick 事件。2) 在单击事件处理程序中根据 Sender 的值设置画笔的样式, Sender 值也就是发送单击事 件的控件:TCld .fastcall TForml;:SetPenStyle(TObject Sender)if (Sender = Solidpen)Canvas-Pen-S tyle = psEolid;elae if iSender 二二 DashPenJCanvas -Pen-Sl.yl = pEDash;else if lender 匕 DotPRnjCanvas Pen-Style = pgDot;else if : Sender -= DashDotPenCanvas-Per)-StyLe = psDashDot;else if (Sender = CdiahDctDotreniCanvas-PenLStyLe = psEa

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号