| 操作系统 办公 实用知识 设计 开发 WEB开发 移动开发 数据库 软件工程 网管 安全 管理 信息化 答疑 渠道 |
C++ Builder 可视化组件库(VCL)中的对象、组件与控件
图2 - 1为可视组件库的分层结构的简图,图中显示出了树状分层结构的五个主要的分支。 2.4.1 TObject分支 TObject是许多简单类的直接祖先。在这一分支中所包含的类有一个共同的重要的特性,它们都是暂时的。这是指,这些类都没有用来在对象被销毁之前保存状态的方法,它们不是固有的。 在这一分支中一个较主要的类为异常(Exception)类。它提供一组内嵌的异常类用于自动处理除数为零的错误、文件I/O错误、非法的类型匹配及许多其他的异常情况。 包含于TObject分支的还有一些封装数据结构的类,例如: · TBits,存储了一个布尔型“数组”的类。 2.4.2 TPersistent分支 在VCL分层结构中直接在TObject之下的是TPersistent。TPersistent给其下所有的类添加了两个重要的方法:SaveToStream和LoadFromStream。这些方法向对象提供固有特性。例如:当窗体设计器需要创建DFM文件(存储窗体及其组件信息的文件)时,它循环检查窗体的组件数组,并对其中所有的组件都调用SaveToStream方法。每个组件都“知道”如何将改变了的属性写入流中(如文本文件)。反过来,若窗体设计器需要从DFM文件中装入组件属性时,它循环检查窗体的组件数组,并对其中所有的组件都调用LoadFromStream方法。因此,任何TPersistent的派生类都有保存状态信息和需要时还原它们的能力。 在这一分支中包含的类主要有: · TGraphicsObject,图形对象的基类,封装了Windows图形对象:TBrush、TFont、TPen。 2.4.3 TComponent分支 TComponent是所有VCL组件的共同祖先。组件就是在设计时可在窗体中操纵的对象。虽然名为可视组件库,其实VCL中包含的大部分对象为非可视化的。 VCL组件都是固有的对象,其功能主要有: TComponent扮演了一个所有组件都可插入的标准“总线”的角色。TComponent通过Name和Owner属性及一些方法规定组件在设计时的行为。所有派生于TComponent的类都有Name和Owner属性。Owner属性值,也即组件的属主负责该组件对象的销毁。 在这一分支中包含的类主要有: · TMainMenu 为窗体提供菜单栏及相应的下拉菜单的类。 2.4.4 TControl分支 所有的控件都是可视化对象,即它们在运行时可见并可被用户操纵。且它们都有作为可视化控件所共有的属性、方法和事件,例如控件的位置、光标、与控件关联的提示、用来描绘或移动控件的方法、用来响应鼠标动作的事件等。 TComponent定义所有组件的行为,TControl则进一步定义了所有可视化控件的行为。包含画图例程、标准Windows事件及容器特性。 在这一分支中一组较重要的类为TGraphicControl。TGraphicControl控件类必须能描绘它们自己并且从不接受焦点。在这组控件中主要包含: · TImage,一种显示图形类图像的控件。 注意到这些控件包含通用的画图例程(画图、重画、使无效等),但C++Builder不必为它们分配窗口句柄,因为它们从不需要接受焦点。 2.4.5 TWinControl分支 TWinControl是为所有的窗口控件的基类。下面的是窗口控件的几个特征: 除了能接受焦点外,TWinControl与TControl基本相同。这意味着它们不但包含许多标准Windows事件,同时Windows还必须给它们分配窗口句柄。这一分支中包含了两大类控件,一种是由Windows自动描绘的(包括TEdit、TListBox、TComboBox、TPageControl等),另一种是C++Builder自定义的(包括TDBNavigator、TMediaPlayer、TGauge等)。不过,你根本不必关心控件如何描绘它们自己或如何响应事件,这些都已被C++Builder所完全封装。 2.4.6 TControl的共同属性 所有可视化控件(TControl的后裔)共享的属性包括: 这些属性是从TControl继承而来的,它们都是发布属性,因此,只对于那些适用的组件它们才会出现在对象观察器中。例如:TImage未发布Color属性,因为它的颜色是由它所显示的图形决定的。 1、Action(动作)属性 Action可以让一些动作共享代码(例如:当工具栏按钮和菜单项所做的事相同),并且依赖于应用程序的状况,提供了简单的易实现的方法控制动作的有效与否。 · Action指定与控件相关的动作。 3、显示属性 下面的属性控制控件的常规外观: · Color,改变控件的背景色。 · Font,改变文本的颜色、类型、样式和尺寸。 4、父代属性 为了在你的应用程序中保持一致的外观,你可以通过设置父代属性来使任何控件和它们的父代控件看上去都很相似。 5、导航属性 下面的属性确定用户如何在窗体的控件之中定位:Caption,包含作为组件标号的字符串。要为字符串中的字符加下划线,需在该字符之前加一连字符(&)。这类字符被称为快捷键。用户按下Alt键的同时键入加下划线的字符,就可选择控件或菜单项。 6、拖放属性 有两个组件属性影响拖放操作: · DragMode,确定拖动何时开始。DragMode的缺省值是dmManual,应用程序必须调用BeginDrag方法来开始拖动。当DragMode是dmAutomatic时,鼠标键一按下,拖动即开始。 7、拖动-停靠属性 下面的属性控制拖动-停靠操作: · Floating,指示控件是否为浮动的。 2.4.7 TControl通用标准事件 VCL中的控件都定义了一些标准事件。下面的事件是TControl类所声明的一部分,因此所有TControl的派生类都可用: 2.4.8 TWinControl的共同属性 所有的窗口控件(TWinControl的后裔)所共享的属性包括: 这些属性是从TWinControl继承而来的,它们都是发布属性,因此,只对于那些适用的组件它们才会出现在对象观察器中。 1、常规信息属性 常规信息属性包含TWinControl的外观信息、客户区尺寸和起点、Windows指定信息、及鼠标信息。 2、边界样式显示属性 斜角(Bevel)属性控制应用程序中窗体或窗口控件斜角行、边框、页面的外观。 3、导航属性 两个附加的属性确定用户如何在窗体之中定位控件: · TabOrder,指出控件在它们的父代组件中的Tab排序,也即用户按Tab键时控件收到焦点的顺序。初始的Tab排序就是组件加入到窗体的顺序,但是你能通过改变TabOrder来改变这一顺序。只有当TabStop是true时TabOrder才有意义。 4、拖动-停靠属性 下面的属性管理拖动-停靠操作: · UseDockManager,指定拖动-停靠操作的管理者。 2.4.9 TWinControl的通用标准事件 下面的事件存在于所有从TWinControl派生的控件(包含所有的Windows定义的控件)。这些事件是对于存在于所有控件之中的事件的补充。 2.4.10 创建应用程序用户界面 在C++ Builder中,所有的可视化设计工作都在窗体中展开,当你打开C++Builder或建立一个新工程时,屏幕上会出现一个空白的窗体。可以用这个窗体来建立应用程序界面,包括窗口、菜单、对话框等。 通过可视化的组件,如按钮、列表框等在窗体上的放置和排列,可以设计出用户图形界面的外观,而底层的工作细节则由C++ Builder自动管理。同时,也可以将一些非可视化的组件放入窗体之中,以便管理数据库信息,进行计算,管理其他操作等。 2.4.11 使用组件 大多数可视化组件由开发环境本身提供,放置在组件面板之上。从组件面板中选择组件并放置到窗体中即可设计应用程序用户界面。可视化组件被放入窗体中后,就能调整它们的位置、尺寸、及其他设计时属性。 组件面板上的C++Builder组件以其功能的不同分属于不同的页。例如,常用组件,比如那些用来创建菜单、编辑框或按钮的组件,位于组件面板中的标准(Standard)页。一些简便的控件比如,计时器、绘图框、媒体播放机、OLE容器控件等在系统(System)页。 乍看之下,C++Builder组件与任何其他的C++类大致一样。但是,在C++Builder组件和大多数的C++程序员所使用的标准C++类分层结构之间还是存在一些差异的。下面就是其中的一些差别: · 所有的C++Builder组件由TComponent类派生而来。 · 组件大多数的应用是通过改变他们的属性来使用,而不是作为“基类”以使其子类能够增加或改变其成员函数。当组件被继承时,通常是给现有的事件处理成员函数加上具体的代码。 · VCL组件只可分配在堆中,而不能在栈中(它们必须用new操作符来创建)。组件的属性本质上包含运行时类型信息。 · 组件可以被加到C++Builder用户界面的组件面板中并且可在窗体中操纵。 · 组件通常比标准C++类封装得更好。例如:考虑一个包含一个按钮的对话框。在C++Windows应用程序中,当用户单击按钮时,系统产生一个WM_LBUTTONDOWN消息。程序必须捕捉这个消息(典型的是在Switch状态、消息映象、或响应列表),并将它分派到可响应这个消息的例程中。 C++Builder组件可处理大多数的Windows消息。若要响应一个Windows消息时,只需提供一个事件句柄即可。
今日推荐
|
重点推荐
领军企业技术文库
+更多领军技术文库
最新专题
电子杂志订阅
| ||||||||