首 页 | 新 闻 | Symbian | Android| Windows Mobile | J2ME | 下载中心 | 游戏策划招聘与求职 | 购书指南 | 视频教程
您现在的位置: 开发视界 >> Symbian >> 语言基础 >> 正文
C++ Builder 在控件中加入图形
作者:unknown    文章来源:不详    更新时间:2006-5-6 20:26:16
 
5.4 在控件中加入图形
有一些窗口控件可让你定制其绘制的方式。这些控件包括列表框、组合框、菜单、标题、标签控制、列表视图、状态栏、树视图及工具栏等。在运行时,它们由其属主(通常是窗体)绘制,而不是使用Windows标准的绘制方式。这些属主绘制控件最常用于提供图形以代替文本项或附加给文本项。有关使用属主绘制给菜单添加图像信息,请参见4.7.2节中的“在菜单项中加入图像”。

所有的属主绘制控件都包含项列表。通常,这些列表是Windows显示为文本的串的列表,或是包含Windows显示为文本的串的对象列表。可为每个项分配一个对象,这样,当绘制项时就可方便地使用这些对象。

通常,在C++Builder中创建属主绘制控件包括下列步骤:
1) 指定控件为属主绘制控件。
2) 给串列表增加图形对象。
3) 绘制这些属主绘制的项。

5.4.1 指定控件为属主绘制控件
要定制控件的绘制,必须为在需要时画出控件图像提供事件处理程序。一些控件可自动接受这些事件。例如,列表视图、树视图及工具栏都会在绘制过程的不同阶段收到这些事件,同时并不需要设置任何属性。这些事件的名字一般为OnCustomDraw或OnAdvancedCustomDraw。
其他控件,在接受属主绘制事件之前需要设置属性。列表框、组合框、标题控件及状态栏有一个Style属性。它确定控件是使用缺省绘制方式(称为standard)还是属主绘制方式。网格使用DefaultDrawing属性来启用或禁用缺省绘制方式。列表视图和标签控制有一OwnerDraw属性用于启用或禁用缺省绘制方式。
列表框和组合框有附加的属主绘制样式,称为fixed和variable,如表5-2中所述。其他控件则总是fixed样式,虽然其包含文本的项的大小可能是多样的,但在绘制控件之前各项的大小已被决定。
点击放大

5.4.2 给串列表增加图形对象
每个串列表都有将一个对象列表附加于其串列表上的能力。

例如,在一个文件管理器应用程序中,可能需要在驱动器盘符边附加位图以指示驱动器的类型。要完成此任务,首先需将位图图像加入应用程序中,然后将图像放到串列表中适当的位置,如下所述。

1.将图像加入应用程序
图像控件是不可视的包含图形化图像的控件,如位图。可使用图像控件在窗体中显示图形化图像。还可使用它们来保留应用程序将会用到的隐藏图像。例如,可以为属主绘制控件将位图存储在隐藏的图

像控件中,像这样:
1) 将图像控件加入主窗体。
2) 设置它们的Name属性。
3) 将每个图像控件的Visible属性设为false。
4) 在对象观察器中使用图片编辑器将各图像控件的Picture属性设为需要的位图。
运行应用程序时图像控件不可见。

2.将图像加入串列表
当在应用程序中加入图形化图像后,可将它们与串列表中的串联系起来。可在加入串的同时加入这些对象或将其与现有的串联系起来。若所有需要的数据都可用,则首选的方法是在加入串的同时加入这些对象。

下例说明如何将图像加入串列表。这是一个文件管理器应用程序的一部分,在各驱动器的有效盘符旁,加入位图以指示各驱动器类型。OnCreate事件处理程序为:



3.绘制属主绘制的项
当通过设置属性或提供定制的绘制事件处理程序指定控件为属主绘制控件时,Windows不再在屏幕中绘制该控件。它会为控件的各可见项产生事件。应用程序处理这些事件来绘制这些项。要绘制属主绘制控件中的项,对控件中各可见项进行下列步骤。对所有的项使用统一的事件处理程序。

1) 若需要则设置该项的尺寸。同样大小的项(例如:样式为lsOwnerDrawFixed的列表框)不需要调整大小。
2) 绘制该项。

5.4.3 调整属主绘制项的大小
在应用程序绘制可变的属主绘制控件中的各个项之前,Windows产生一个measure-item事件。这个measure-item事件通知应用程序控件在哪里显示项。

Windows确定项的大小(通常其大小刚够以当前字体显示该项文本)。应用程序可处理事件并改变Windows选择的矩形区域。例如,若计划用位图代替该项文本,可将矩形区域改为位图的大小。若要同时显示位图和文本,将矩形区域调整为足够显示两者。要改变属主绘制项的大小,可为属主绘制控件的measure-item事件分配处理程序。根据控件的不同,measure-item事件的名字也不相同。列表框和组合框使用OnMeasureItem。网格则没有measure-item事件。

这个调整大小的事件有两个重要的参数:项的索引值及项的大小。项的大小是变量,应用程序可增大或减小它。后面项的位置依赖于前面项的大小。例如,在一个可变的属主绘制列表框中,若应用程序指定第一个项的高度为5个像素,则第2项由第6个像素向下开始显示等等。在列表框和组合框中,应用程序只能改变项的高度。项的宽度总是控件的宽度。

属主绘制网格在绘制时不能改变其单元的大小。各行和列的大小在绘制之前由ColWidths及RowHeights属性决定。下列代码,为属主绘制列表框的OnMeasureItem事件处理程序,其中将各列表项高度增加以适应与之关联的位图。


注意 必须将项的类型转换为与串列表的Objects属性值的类型一致。Objects是一个TObject类型的属性,所以它能够存放任意对象。当从数组中获取对象时,需要将它们的类型转换为与实际项类型一致。

5.4.4 绘制各属主绘制项
当应用程序需要绘制或重画一个属主绘制控件时,Windows为控件中各可见项产生draw-item事件。根据控件的不同,项还可能会作为一个整体或子项收到绘制事件。要在一个属主绘制控件中绘制各项,可为该控件的draw-item事件分配处理程序。

属主绘制控件中的这类事件的名字通常以下列方式开头:
· OnDraw,如OnDrawItem或OnDrawCell。
· OnCustomDraw,如OnCustomDrawItem。
· OnAdvancedCustomDraw,如OnAdvancedCustomDrawItem。

draw-item事件包含的参数可用于识别要绘制的项,包含项的矩形区域及一些项的相关信息(如项是否有焦点)。应用程序通过在给定的矩形区域中绘制适当的项来处理各个事件。例如,下列代码说明如何绘制列表框中带有关联位图的项。它是列表框的OnDrawItem事件处理程序:
 
相关文章:
简单控件和复合控件的使用
Symbian OS Internals——Symbian OS模拟器
在Symbian程序中使用汇编代码
S60系列用户界面显示器规范
Symbian系统中DLL的冻结
S60中绘制动态图片
S60程序中,如何在指示器面板中绘制图标
移动代码签名 (ACS) 常见问题问答
 

站点地图 | 加入收藏 | 联系站长 | 广告服务 |
QQ:280529124  Tel:0592-8271361 辽ICP备05021703号