S60视图(View)结构简介

原创 2007年09月20日 13:42:00
S60视图(View)结构简介

在S60平台的应用程序开发中,视图架构(View architecture)是一种被广泛应用的技术。一个图形用户界面(GUI)应用程序可以创建若干个视图,每个视图用来显示不同的应用程序数据或者用户界面的控件。每一个视图,都拥有自己的控件栈(Stack)。每个视图的容器(container,一种用以集合子控件父控件)和控件都是在视图被启动时候才被创建的,而当同一个应用程序的其他视图被启动的时候,当前视图的控件和容器会被删除。当一个视图被启动的时候,将会有一个消息ID参数以及一个消息参数传递给要被激活的视图。这个机制就大大增加了应用程序的功能可重用性,你可以使用其它已存在的应用程序的某个视图来为你的程序增添功能。


视图架构的概览在传统Eikon图形界面应用程序中的AppUi类里,你可以创建容器类(container class),用容器来作为子控件的管理工具。在基于视图的图形界面应用程序中,我们可以创建继承自CAknView的视图类,该类对象是AppUi的成员变量,而AppUi则应是继承自CAknViewAppUi。CAknViewAppUi其实是CAknAppUi类的子类,他增添了一些处理视图的方法/函数。视图的被激活(Activation)和被移除(Deactivation)处理,是在视图类中由函数DoActivateL()和DoDeActivateL()来完成的,而不是在视图的管理类中进行的。在上述函数中,视图的容器类被构造或析构,而容器类负责对每一个子控件进行构造和析构。


切换视图在你的同一个应用程序中来切换到某一个视图,你可以使用AppUi类的ActivateLocalViewL()函数。该函数的参数可以是一个TUid类型变量,下面就是一个切换视图的示例:
const TUid KDemo1ViewId = { 1 }; // 第一个视图的UIDActivateLocalViewL(KDemo1ViewId); // 启动第一个视图在激活视图动作发生的时候,第一步是新的视图被激活(activated),第二步是前一个活动的视图被移除(deactivated)。这种方法可以让视图以很快的速度的进行切换。当移除视图动作发生的时候,该视图的所有控件,包括菜单和对话框,都要被关闭/析构。系统对话框会作自动处理,自行关闭。如果你需要在对话框即将被关闭的时候保存数据,那么你只需要在对话框中处理EAknSoftkeyCancel命令,即可在对话框被关闭之前保存控件中的数据,而处理之后,删除资源工作将会继续进行。


发送消息ActivateLocalViewL()函数有一个重载形式可以将消息ID和一段消息内容传递给某一个视图。消息ID是一个TUid类型的变量,通常用来指定传递消息给视图的具体某一个控件或者对话框,用以让该控件或对话框执行某一项命令,而消息内容是一个TDesC8类型的字符串(descriptor),它可以用来在不同视图之间传递数据。下面就是使用范例:
const TUid KViewUid= {1};const TUid KCustomMessageUid= {2};TBuf8<255> customMessage;customMessage.Copy(_L8("Some data here"));ActivateLocalViewL(KViewUid, KCustomMessageUid, customMessage);

DoActivateL以及前一视图的ID视图类中的DoActivateL()函数的目的是创建容器类以及处理传递进入视图的消息ID以及消息内容。除了这些在前一部份中讲到的内容,DoActivateL() 还提供了一个类型为TVwsViewId的参数,用来表示前一个视图的ID。这个参数可以让当前视图返回前一个激活他的视图,而且可以保存前一视图的具体某一个消息ID。比如当前的视图是被其他应用程序的某一个视图启动的,那么当本视图结束后,当前视图可以根据传递进来的前一视图参数,返回相应的呼叫应用程序中去。


DoDeActivateL函数DoDeActivateL是应用程序中另外一个视图已经被激活,当前视图即将被关闭时被调用的函数。这种顺序使得视图的切换速度变得十分迅速。当DoDeActivateL被调用的时候,该视图已经从视图管理栈中被移除,因此,视图的容器类以及容器类所管理的所有控件,都需要被析构。


使用其他应用程序的视图激活外部应用程序的某一个视图,可以使用AppUi类的ActivateViewL函数来完成。ActivateViewL()函数和ActivateLocalViewL()函数的使用方法是类似的,唯一不同之处就在于,ActivateViewL()函数使用TVwsViewId类型的参数而ActivateLocalViewL()使用的是TUid类型的参数。TVwsViewId类型的参数,由外部应用程序的UID和该应用程序的视图ID所组成,下面是使用范例:


const TUid KPhotoAlbumUid KGalleryUid = {0x101f8599 0x101F4CD1};CCoeAppUi::ActivateViewL(TVwsViewId(KGalleryUidKPhotoAlbumUid,TUid::Uid(1)));// ActivateViewL()的调用过程和ActivateLocalViewL()几乎是完全一样的要想向外部应用程序传递参数,范例如下:


const TUid KCustomMessageUid= {2};TBuf8<255> customMessage;customMessage.Copy(_L8("Some data here"));const TUid KGalleryUid KPhotoAlbumUid={0x101f8599 0x101F4CD1};CCoeAppUi::ActivateViewL(TVwsViewId(KGalleryUidKPhotoAlbumUid, TUid::Uid(1)), KCustomMessageUid, customMessage);
当用户退出了被激活的外部应用程序,那么系统将会自动回到原先调用ActivateViewL()函数的地方 

Android视图架构详解

作者: ztelur 联系方式:segmentfault,csdn,github 转载请注明原作者、文章来源,链接,版权归原文作者所有。  最近一直在研究View的绘制相关的机制,发现需要补充一...
  • u012422440
  • u012422440
  • 2016年04月17日 15:13
  • 6289

查看项目层级结构layout视图树-hierarchyviewer工具

查看项目的视图树和项目的view的层级结构有个sdk自带的工具:sdk-tools-hierarchyviewer工具 双机打开后: 选择自己的项目,点击Load Vi...
  • u012246458
  • u012246458
  • 2015年06月25日 11:36
  • 2803

iOS 的视图层次结构、继承关系及常用结构体探讨

视图生命周期探讨
  • jiisd
  • jiisd
  • 2015年02月28日 10:13
  • 2201

S60智能手机内部文件系统简介

  • 2009年07月05日 17:27
  • 61KB
  • 下载

【Facebook的UI开发框架React入门之五】视图View与文本Text简介(iOS平台)-goodmao

React.native是facebook开源的一套基于JavaScript的开源框架, 很方便用来开发移动设备的app。 而且,方便及时更新app的UI与数据,也很方便部署。 goodmao希望帮助...
  • maoyingyong
  • maoyingyong
  • 2015年06月17日 11:08
  • 766

UIView 简介(六)视图几何结构和坐标系统 包括frame, bounds和center属性之间的关系

UIKit的默认坐标系统把原点设置在左上角,两条轴往下和右扩展。做标志被表示为浮点数,这样允许内容的精确布局和定位而不管底层的屏幕。 Figure1-4展示了相对于屏幕的坐标系统。除了屏幕坐标系统窗...
  • czcdms
  • czcdms
  • 2015年03月25日 17:15
  • 414

数据库 day60,61 Oracle入门,单行函数,多表查询,子查询,事物处理,约束,rownum分页,视图,序列,索引

数据库 day60,61 Oracle入门,单行函数,多表查询,子查询,事物处理,约束,rownum 分页,视图,序列,索引...
  • opopopwqwqwq
  • opopopwqwqwq
  • 2016年06月23日 02:51
  • 8278

菜鸟学习Spring——60s利用JoinPoint获取参数的值和方法名称

一、概述       AOP的实现方法在上两篇博客中已经用了两种方法来实现现在的问题来了虽然我们利用AOP,那么客户端如何信息传递?利用JoinPoint接口来实现客户端给具体实现类的传递参...
  • gwblue
  • gwblue
  • 2014年10月29日 21:43
  • 38456

STC12C5A60S2单片机实现ISP自动下载

在我们使用STC系列单片机开发项目时,最烦人的就是每次点击Download之后的时候都要断电重新上电才能下载。相信很对朋友们都会遇到这样的问题; 如果仅仅是调试项目的过程无可厚非,就是按一下按钮的事...
  • hanxuexiaoma
  • hanxuexiaoma
  • 2016年07月11日 14:06
  • 2001

用stc12c5a60s2单片机的PCA寄存器输出PWM波,通过MX214B芯片控制直流电机

 一.PCA寄存器的资料 1,stc12c5a60s2一般pwm频率=PCA时钟源/256 2,PCA时钟源设置有4种方式,一般都有T0的溢出率,来设置PCA时钟源, 一般在COMD这个寄...
  • wzx104104104
  • wzx104104104
  • 2017年11月23日 13:39
  • 162
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:S60视图(View)结构简介
举报原因:
原因补充:

(最多只允许输入30个字)