Symbian应用程序常用架构——2

转载 2007年10月09日 11:58:00

(2)       基于对话框的架构

它不同于传统Symbian OS架构的是,它拥有的控件直接从对话框类家族继承而来。

对话框的主要优点是:相对于直接从CcoeControl派生而来的控件,它需要较少的开发工作,因为它们自动管理子控件的布局。

AppUi类中完成构造和运行:

void CsimpleDlgAppUi::ConstructL()

{

       BaseConstructL();

       IAppDialog=new(ELeave) CsimpleDlgDialog;

       IAppDialog->SetMopParent(this);

       IAppDialog->ExecuteLD(R_SIMPLEDLG_DIALOG);

       AddToStackL(iAppDialog);

}

因为对话框是无模式的,ExecuteLD()将在调用后立刻返回。必须使用AddToStackL()将对话框添加到控件栈中,因为无模式的对话框无法自己完成这项工作。

还有,必须在AppUi的析构函数中销毁该对话框:

CsimpleDlgAppUi::~CsimpleDlgAppUi()

{

if(iAppDialog)

{

       RemoveFromStack(iAppDialog);

       delete iAppDialog;

}
}

(3)       Avkon视图切换架构

比前两种都复杂,引入另一个类作为AppUi和容器之间的媒介。另外,AppUi类从CAknViewAppUi继承,而不是继承于CaknAppUi

前两个架构,AppUi直接负责处理视图切换,它必须管理视图提交控件的实例化、删除和显示。但是,基于CaknView的类在这方面可以很明显地减少AppUi地任务。

AppUi仍然处理视图切换的请求,但现在,并不是删除旧的容器并实例化新的容器,AppUi只需要调用它的其中一个特殊视图激活函数,如ActiveViewL()。这些特殊的CaknViewAppUi函数向View服务器提交一个激活请求,然后通过基于CaknView的相关类中的激活/禁止成员函数,View服务器显式地协调当前视图地禁止和所请求视图的激活。

这种架构所需的一般特性如下:

l         必须设计应用程序,使每个CAknView派生的Avkon视图拥有一个容器,然后AppUi拥有每个Avkon视图。

l         必须从CaknViewAppUi派生应用程序的AppUi,而不是从CAknView派生,这是因为前者提供了注册、激活和禁止Avkon视图的方法。

l         必须在View服务器中注册所有的Avkon视图。

l         Avkon视图具有激活/禁止成员函数,View服务器可以直接调用这些函数。必须重写这些函数,提供从属容器的正确处理。

View服务器最主要的原则:确定在任意给定时刻,每个应用程序中只有一个Avkon视图被激活。Avkon视图通过两个UIDView服务器唯一性的标志自己:一个UID用于标志拥有该视图的应用程序,另一个UID用于在该应用程序中唯一标志该视图。

对于每个基于CAknView的类,需要实现的激活/禁止函数是:DoActiveL()DoDeactivate(),这些函数负责实例化和显示或者删除Avkon视图拥有的UI控件。

View服务器将主动调用DeactivateView(),从而强制遵循每个应用程序中只有一个激活视图的规则。

如何使用Avkon视图切换架构:

l         使用这种架构时,必须结合使用CaknViewAppUiCAknView类。每个Avkon类都从CAknView派生而来,并且必须包含一个Id()函数,从而系统可以标志这个类。它也必须实现DoActivateL()和DoDeactivateL()函数。此外,它还必须实现HandleForegroundEventL()、HandleCommandL()和HandleStatusPaneSizeChange()函数,用于处理各种事件

l         用户请求激活视图时,View服务器将调用DoActivateL()。该函数的目的是实例化并显示提交视图的控件。

注意:在DoDeactivateL()之前可以多次调用DoActivateL()。

l         将要禁止Avkon视图时,则会调用DoDeactivateL(),该函数负责销毁它的控件。当应用程序退出时,或者激活相同应用程序的另一个视图时,将禁止视图。该函数绝对不能异常退出。

l         只有在激活Avkon视图时才会调用HandleForegroundEventL(),即在调用DoActivateL()和DoDeactivateL()之间。当视图到达前台时,接收HandleForegroundEventLEtrue,当从前台移除视图时,将接收HandleForegroundEventLEfalse。程序员可能希望使用这种方法来设置焦点或控制屏幕更新。

视图菜单生成一条命令时,调用HandleCommandL(),因为状态面板改变而使客户矩形大小改变时,则调用HandleStatusPaneSizeChange()

为了让Avkon视图定义它自己的软键和菜单资源,可以在资源文件(.rss)中创建一个AVKON_VIEW资源,然后将资源ID传递到视图的BaseConstructL()函数中。

通常在AppUi对象的ConstructL()方法中构造应用程序中的所有Avkon视图。使用AddViewL()在View服务器中注册这些Avkon视图,最终通过设置默认的视图来激活初始视图,使用方法SetDefaultViewL()

注意:不是由Avkon视图处理的命令被传递到AppUiAppUiHandleCommandL()方法里,只进行视图间切换的命令。本地视图切换或者是应用程序拥有的视图切换,这些工作都通过引用目标Avkon视图的UID来执行。

为了执行外部视图切换,则需要调用CcoeAppUi::ActivateViewL()函数,提供一个包含目标应用程序UID和目标视图UIDTVWsViewId。如:

const Tuid KphoneBookUid={0x101f4cce} ;// from PbkUID.h

const Tuid kphoneBookContactViewUid={1};

ActivateViewL(TvwsViewId(KphoneBookUid,KPhoneBookContactViewUid));

注意:如果自己的程序中的某部分视图能够被其他程序使用,那么我们必须通过导出为头文件来发布应用程序UID和视图UID

 

11款常见的Web应用程序框架

11款常见的Web应用程序框架
  • YaoXTao
  • YaoXTao
  • 2014年09月13日 19:01
  • 1773

深入解析java应用程序的一般架构(好文)

1. 不同系统不同语言之间的交互  现在我们常见的不同系统不同语言之间的交互使用WebService,Http请求。WebService,即“Web 服务”,简写为WS。从字面上理解,它其实就是“基于...
  • hliq5399
  • hliq5399
  • 2016年06月04日 15:37
  • 4232

坐井观天谈Windows桌面应用程序开发中的MVC架构(一)之个人开发之路

刚刚毕业的时候从第二份工作开始就进入了Windows桌面程序开发中,从此一如侯门深似海,多次徘徊在进入服务器端开发的门口,却始终没能迈进去。刚开是写基于MFC的UI写到崩溃,经常是一个很简单的界面效果...
  • whuavon
  • whuavon
  • 2015年09月12日 14:17
  • 1879

深入浅出J2EE架构——应用程序设计与部署的原理.part1

  • 2007年07月09日 12:31
  • 9.77MB
  • 下载

深入浅出J2EE架构——应用程序设计与部署的原理.part3

  • 2007年07月09日 12:35
  • 2.78MB
  • 下载

深入浅出J2EE架构——应用程序设计与部署的原理.part2

  • 2007年07月09日 12:34
  • 9.77MB
  • 下载

Symbian OS 软件开发——应用C++开发智能手机应用程序入门

  • 2008年04月07日 11:15
  • 138KB
  • 下载

Symbian/Android/iOS/WM应用程序开发感受对比

前后参与过Symbian/Android/iOS/WM的程序开发,在这里列一下各个平台程序开发感受对比。Symbian:1. Symbian开发的配套文档比较差。虽然也有Symbian SDK配套的文...
  • lsjjenny
  • lsjjenny
  • 2011年07月03日 21:02
  • 396

Symbian 应用程序中的UID

转自Liquns BLOG Symbian UID Classificationsymbian 应用程序主要由UID来标识,在V9.0以后,UID可以分为两类:受保护(protected)和未受保护(...
  • crazy_du123
  • crazy_du123
  • 2011年06月23日 11:30
  • 444

Symbian应用程序更换系统控件背景

很多开发者都会为界面、控件而发愁。其中,对系统控件的运用是开发者纠结最多的问题。每个平台都有自己的系统控件,系统控件是由系统开发商开发的,各个方面都很成熟,节省开发时间。但也有很严重的问题,如:界面陈...
  • phoenixcuibj
  • phoenixcuibj
  • 2011年01月05日 15:29
  • 176
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Symbian应用程序常用架构——2
举报原因:
原因补充:

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