第七章 使用控件
1 第七章 使用控件
本章目标 完成本章内容之后我们将能够: 掌握控件和相关的API
2 完成本章内容之后我们将能够: 掌握控件和相关的API 本 章 目 标
控件 在Symbian OS中,控件提供应用程序和用户之 间交互的主要方式。应用程序大量使用控件:应 用程序的每个视图都是一个控件,控件构成全部 对话框和菜单窗格的基础。 控件占据屏幕的一个矩形区域,除了响应用户、 应用程序和系统产生的事件,它还可以显示文本 和图像的任意组合。 基于特定用户界面,用户产生的事件可能包括: ·按键(字母数字或特定设备的按钮)。 ●指针事件,用户用触笔点击屏幕产生
3 控件 在Symbian OS中,控件提供应用程序和用户之 间交互的主要方式。应用程序大量使用控件:应 用程序的每个视图都是—个控件,控件构成全部 对话框和菜单窗格的基础。 控件占据屏幕的—个矩形区域,除了响应用户、 应用程序和系统产生的事件,它还可以显示文本 和图像的任意组合。 基于特定用户界面,用户产生的事件可能包括: ⚫ 按键(字母数字或特定设备的按钮)。 ⚫ 指针事件,用户用触笔点击屏幕产生
控件 绘制控件的内容可以由应用程序本身启动, 例如当控件的可显示数据更改时。系统也可 以启动绘制,例如由于覆盖控件(可能属于 同一个或另一个应用程序)的消失,暴露了 控件的全部或部分。 记住,Symbian OS 是一个完全多任务处理系统,多个应用程序 可以并发运行,屏幕是必须在所有这些应用 程序之间共享的惟一资源。通过关联一个或 多个窗口与每个应用程序,处理控件和屏幕 之间的交互,Symbian OS用以实现这种共享 窗口由窗口服务器管理,保证一个或多个正 确的窗口显示,根据需要管理覆盖、暴露利 馅断的容回
4 控件 绘制控件的内容可以由应用程序本身启动, 例如当控件的可显示数据更改时。系统也可 以启动绘制,例如由于覆盖控件(可能属于 同一个或另一个应用程序)的消失,暴露了 控件的全部或部分。 记住,Symbian OS 是—个完全多任务处理系统,多个应用程序 可以并发运行,屏幕是必须在所有这些应用 程序之间共享的惟一资源。通过关联—个或 多个窗口与每个应用程序,处理控件和屏幕 之间的交互,Symbian OS用以实现这种共享。 窗口由窗口服务器管理,保证—个或多个正 确的窗口显示,根据需要管理覆盖、暴露和 隐藏的窗口
控件 为了获得对屏幕的访问权,每个控件必须 与一个窗口关联,但是不需要每个控件都拥 有一个单独的窗口。一些称为“拥有窗口的 控件(window-owningcontr01)”的控件使 用一个完整窗口,但是许多其他称为“非拥 有窗口的控件(non-window-owningcontr01)” 的控件<或更准确地说,叫做寄宿控件, logercontr01)只是共享由另一个控件拥有 的窗口
5 为了获得对屏幕的访问权,每个控件必须 与一个窗口关联,但是不需要每个控件都拥 有—个单独的窗口。一些称为“拥有窗口的 控件(window-owningcontr01)”的控件使 用—个完整窗口,但是许多其他称为“非拥 有窗口的控件(non-window-owningcontr01)” 的控件<或更准确地说,叫做寄宿控件, logercontr01)只是共享由另—个控件拥有 的窗口。 控件
控件 通过检查OwnsWindow()返回ETrue还是 EFalse,可以测试控件是否拥有窗口,尽管 它的主要用途是在CCoeControl的框架代码 内。例如这个测试用于CCoeControl的析构 函数中,确定是否应该调用C10 seWindow()
6 通过检查OwnsWindow()返回ETrue还是 EFalse,可以测试控件是否拥有窗口,尽管 它的主要用途是在CCoeControl的框架代码 内。例如这个测试用于CCoeControl的析构 函数中,确定是否应该调用C10seWindow()。 控件
控件 对于Symbian OS等系统,它可能运行在能 源和资源有限的设备上,窗口比较昂贵。每 个窗口明显只在使用资源的应用程序中使用 该资源,但是在窗口服务器中它也需要相应 的资源。此外,每个窗口导致应用程序和窗 口服务器之间产生额外的客户端-服务器通 信。所以尽可能使用寄宿控件很有意义。不 过,两种类型在编程方面没有很大差异。 任何普通应用程序都需要某种形式的屏幕 访问,因此必须至少包含一个拥有窗口的控 件。其他控件可能需要拥有一个窗口,如果 它们需要一个窗口的属性,例如覆盖另一个 窗口的功能。◇
7 对于Symbian OS等系统,它可能运行在能 源和资源有限的设备上,窗口比较昂贵。每 个窗口明显只在使用资源的应用程序中使用 该资源,但是在窗口服务器中它也需要相应 的资源。此外,每个窗口导致应用程序和窗 口服务器之间产生额外的客户端-服务器通 信。所以尽可能使用寄宿控件很有意义。不 过,两种类型在编程方面没有很大差异。 任何普通应用程序都需要某种形式的屏幕 访问,因此必须至少包含一个拥有窗口的控 件。其他控件可能需要拥有一个窗口,如果 它们需要一个窗口的属性,例如覆盖另一个 窗口的功能。 控件
控件 所有控件最终派生于CCoeControl类(在 coecntrl.h中定义)。这个类的APl包含大约90 个单独的成员函数:本章将研究比较重要的 函数。 派生于CCoeControl的类的一个非常普遍 的用途是作为应用程序视图,以后将使用视 图说明控件的工作
8 所有控件最终派生于CCoeControl类(在 coecntrl.h中定义)。这个类的APl包含大约90 个单独的成员函数:本章将研究比较重要的 函数。 派生于CCoeControl的类的一个非常普遍 的用途是作为应用程序视图,以后将使用视 图说明控件的工作。 控件
简单控件 除了它们是否拥有窗口,控件还可以是简 单控件或复合控件。复合控件是包含一个或 多个组件控件的控件:简单控件不包含组件 控件。 可以编写的最简单的简单控件是 绘制一个空白矩形并且不响应用户输入(创 建CCoeControl:基类的实例从技术上讲可行, 但是它的用法不清晰,因为结果控 件不能绘制自己)
9 除了它们是否拥有窗口,控件还可以是简 单控件或复合控件。复合控件是包含一个或 多个组件控件的控件:简单控件不包含组件 控件。 可以编写的最简单的简单控件是 绘制一个空白矩形并且不响应用户输入(创 建CCoeControl基类的实例从技术上讲可行, 但是它的用法不清晰,因为结果控 件不能绘制自己)。 简单控件
简单控件 作为一个示例,下面将分析HelloB1ank中 使用的应用程序视图,这是一个在自身视图 中使用这种空白控件的“He1 loWorld”应用 程序。应用程序视图的类 定义很简单: class CBlankAppView:public CCoeControl public: void ConstructL(const TRect&aRect); };
10 作为一个示例,下面将分析HelloBlank中 使用的应用程序视图,这是一个在自身视图 中使用这种空白控件的“HelloWorld”应用 程序。应用程序视图的类 定义很简单: class CBlankAppView:public CCoeControl { public: void ConstructL(const TRect& aRect); }; 简单控件