第七篇使用控件.pptVIP

  • 1
  • 0
  • 约5.68千字
  • 约 32页
  • 2017-08-20 发布于北京
  • 举报
常常有必要让控件将重要的事件通知给某些其他类,做这件事情的标准机制是使用观察器界面。控件框架定义了CoeControlObserver界面类,它拥有单个成员函数HandleControlEventL(),提供接收和处理各种常见控件事件通知的机制。任何派生于这个界面的类被称为控件观察器。控什的观察器经常是该控件的容器,但不一定必须如此。 观察控件 控件的观察器可以使用它的SetObserver()函数设置,并在以后通过Observer()函数引用。希望给它的观察器报告事件的控件应该调用ReportEventL(),传递下面列出的枚举事件类型之一。如果控件的观察器以前已经通过调用SetObserver()进行设置,ReportEventL()将只报告事件。 观察控件 HelloBlank和ConsLauncher示例应用程序都为它们的视图使用空白控件。杀三子程序为它的视图和棋盘的棋格使用自定义控件,两个控件都需要绘制自己的特定内容。 自定义控件绘制其内容的标准方法是实现Draw()函数,因此,前面的简单空白控件的类定义需要更改为: 绘制控件 class CBlankAppView:public CCoeControl { public: CBlankAppView(); ~CBlankAppView(); void ConstructL(const TRect aRect); private: void Draw(const TRect aRect)const; } 绘制控件 显然,视图的ConstructL()函数不应该调用SetBlank(),因此变为: void CHelloBlankAppView::ConstructL(const TRect aRect) { CreateWindowL(); //创建该控件的窗口 SetRect(aRect); //设置控件的大小 ActivateL(); //激活控件,准备进行绘制 } 绘制控件 IC-MSP V1.0 * IC-MSP V1.0 * * IC-MSP V1.0 * * 第七章 使用控件 完成本章内容之后我们将能够: 掌握控件和相关的API 本 章 目 标 控件 在Symbian OS中,控件提供应用程序和用户之间交互的主要方式。应用程序大量使用控件:应用程序的每个视图都是—个控件,控件构成全部对话框和菜单窗格的基础。 控件占据屏幕的—个矩形区域,除了响应用户、应用程序和系统产生的事件,它还可以显示文本和图像的任意组合。 基于特定用户界面,用户产生的事件可能包括: 按键(字母数字或特定设备的按钮)。 指针事件,用户用触笔点击屏幕产生。 控件 绘制控件的内容可以由应用程序本身启动,例如当控件的可显示数据更改时。系统也可以启动绘制,例如由于覆盖控件(可能属于同一个或另一个应用程序)的消失,暴露了控件的全部或部分。 记住,Symbian OS是—个完全多任务处理系统,多个应用程序可以并发运行,屏幕是必须在所有这些应用程序之间共享的惟一资源。通过关联—个或多个窗口与每个应用程序,处理控件和屏幕之间的交互,Symbian OS用以实现这种共享。窗口由窗口服务器管理,保证—个或多个正确的窗口显示,根据需要管理覆盖、暴露和隐藏的窗口。 为了获得对屏幕的访问权,每个控件必须与一个窗口关联,但是不需要每个控件都拥有—个单独的窗口。一些称为“拥有窗口的控件(window-owningcontr01)”的控件使用—个完整窗口,但是许多其他称为“非拥有窗口的控件(non-window-owningcontr01)”的控件或更准确地说,叫做寄宿控件,logercontr01)只是共享由另—个控件拥有的窗口。 控件 通过检查OwnsWindow()返回ETrue还是EFalse,可以测试控件是否拥有窗口,尽管它的主要用途是在CCoeControl的框架代码内。例如这个测试用于CCoeControl的析构函数中,确定是否应该调用C10seWindow()。 控件 对于Symbian OS等系统,它可能运行在能源和资源有限的设备上,窗口比较昂贵。每个窗口明显只在使用资源的应用程序中使用该资源,但是在窗口服务器中它也需要相应的资源。此外,每个窗口导致应用程序和窗口服务器之间产生额外的客户端-服务器通 信。所以尽可能使用寄宿控件很有意义。不过,两种类型在编程方面没有很大差异。 任何普通应用程序都需要某种形式的屏幕访问,因此必须至少包含一个拥有窗口的控件。其

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档