AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > C++

C++ Builder 刷新屏幕

51自学网 http://www.51zixue.net
第6章 使用图形和多媒体

图形和多媒体元素可为应用程序增添光彩。C++Builder提供了几种为应用程序引入这种功能的方法。要加入图形元素,可以在设计时插入一幅预先绘制好的图片,可在设计时使用图形控件创建它们,也可在运行时动态地画出它们。为添加多媒体功能,C++Builder提供了一些可播放声音与视频剪辑的特殊组件。

6.1 图形编程概述
VCL图形组件封装了Windows图形设备接口(GDI),使得在Windows程序设计中添加图形变得很容易。在C++Builder应用程序中绘制图形,应在对象的画布(canvas)中绘制,而不是直接在对象中绘图。画布是对象的属性,同时它本身也是对象。画布对象的一个主要优点是它能够有效地处理资源并能管理设备场境,所以应用程序可以使用相同的方法在屏幕、打印机、位图或图元文件中绘图。画布只在运行时有效,所以用户必须通过编写代码来使用画布。

注意因为TCanvas是Windows设备场境的一个封装的资源管理器,所以也可在画布中使用所有的WindowsGDI函数。画布的Handle属性是设备场境的处理指针。图形在应用程序中如何显示依赖于拥有所用画布的对象类型。若直接在控件的画布上绘图,则该图会立即显示。若绘制诸如TBitmap画布的非屏幕图象,则该图不会显示,直到将其复制到控件的画布中时才会显示。也就是说,当绘制位图并将其赋给图形控件时,仅当控件有机会处理其OnPaint消息时才会显示该图。

当处理图形时,通常会遇到绘图(drawing)和画图(painting)两个名词。
· 绘图是编写代码来创建一个单一的、特定的图形元素(如线条或形状)。在程序中,通过调用画布的绘图方法来告诉对象如何在其画布的特定位置上绘出特定的图形。
· 画图是创建对象的整个外观。画图通常会使用到绘图。也就是说,在响应OnPaint事件时,对象通常要绘出几个图形。例如,一个编辑框通过绘出一个矩形,然后再在内部绘出许多文本来画出自身。而一个形状控件通过绘制单一的图形来画出自身。

在本章开始的示例中展示如何绘出不同的图形,但它们都是在响应OnPaint事件。下列各节将说明如何在响应其他事件时进行同样的绘图操作。

6.1.1 刷新屏幕
有时,Windows会决定刷新屏幕上的对象外观,为此它生成WM_PAINT消息,这个消息会使VCL对象调用OnPaint事件。当使用Refresh方法时,VCL会调用已编写的所有对象的OnPaint事件处理程序。

OnPaint事件自动生成的缺省名为FormPaint。有时可能需要使用Refresh方法来刷新组件或窗体。例如,可能要在窗体的OnResize事件处理程序中调用Refresh方法以便刷新图形,或在画窗体的背景图时调用它。

虽然有些操作系统会自动刷新窗口中无效的客户区部分,然而Windows不会这样做。在Windows操作系统中绘制在屏幕上的东西都是永久的。当窗体或控件变得模糊不清时,例如拖动窗口,当窗体或控件重新显示时,必须自己重画模糊的区域。有关WM_PAINT消息的详细说明,请参阅Windows的联机帮助。

若使用TImage控件,画图和刷新TImage中的图形由VCL自动处理。在TImage中绘图会创建一个固有的图像。因此不需要自行刷新其包含的图像。与此相反,TPaintBox的画布是直接对应于屏幕设备的,因此任何在PaintBox的画布中绘制的东西都是临时性的。其实大部分的控件都是这样,包括窗体自身也是如此。因此,若在TPaintBox的构造函数中绘图或画图,则需要把相同的程序代码加到OnPaint事件处理程序中,以便每次客户区无效时能重画其图像。

 

 

 
上一篇:C++ Builder 画布的通用属性和方法  下一篇:计算机编程的24条法则