Author:孙东风
Date:04/01/2008
我们知道,在大多数GUI的Applications中,视图之间的切换是极其频繁的。那么如何组织这些视图以及视图之间的通讯,就成为大多数Applications所要面对的问题。
在Symbian中多视图应用程序之间的视图管理可以用下图来表示:
其中AppUI管理AppView,而AppView又管理Container。
AppUI继承自CAknViewAppUi,其管理AppView的代码如下:
CAppView1* iView1 = new(ELeave) CAppView1; CleanupStack::PushL( iView1 ); videoView->ConstructL(); AddViewL(iView1 ); CleanupStack::Pop();// view1
CAppView2* iView2 = new(ELeave) CAppView2; CleanupStack::PushL(iView2 ); userView->ConstructL(); AddViewL( iView2); CleanupStack::Pop();// view2
SetDefaultViewL(*iView1);
|
而其中每个View又继承自
class CAppView1: public CAknView , public MCoeControlObserver
class CAppView2: public CAknView , public MCoeControlObserver
|
View之间要想实现自由的切换,就必须定义一个TUid作为自身的唯一标识并实现CAknView的方法
// UID of view const TUid KViewId = {1};
/** * From CAknView returns Uid of View * @return TUid uid of the view */ TUid Id() const;
|
那么从一个View跳转到另一个View就需要下面的代码
((CAknViewAppUi*)(iEikonEnv->AppUi()))->ActivateLocalViewL( TUid::Uid( 3 ));或
static_cast<CApplicationAppUi*>(iEikonEnv->AppUi())->ActivateLocalViewL( TUid::Uid( 3 ));
|
上面的代码讲述了AppUI如何管理众多的View以及View之间的切换,那么下面讲述每个View是如何管理它里面众多的Containers的。
首先要明白View继承自CAknView,它做为Container(继承自CCoeControl)的容器通过以下的代码激活某个Container
iContainer = new (ELeave) CApplicationContainerSetting; iContainer->ConstructL( KFullScreen ); iContainer->SetMopParent(this); iContainer->SetObserver(this); iContainer->SetApplicationDbEngine(iDbEngine); AppUi()->AddToStackL( *this, iContainer ); |
那么在DoActivateL()中通过以上代码放置初始显示的Container。
那么View是如何管理众多的Container的呢?
从以上代码可以看出,负责Container管理的View都继承自MCoeControlObserver,而iContainer->SetObserver(this)则把当前的Container注册到MCoeControlObserver,从而实现了View对其内部Container的监听。
View中继承自MCoeControlObserver的接口void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType)则负责每个Container所报告的事件的处理。
注意:如果View中并没Container,那么就没必要继承自MCoeControlObserver。
而Container继承自CCoeControl(它是HandleControlEventL的一个参数),CCoeControl中提供下面的方法对View中的HandleControlEventL()报告事件。
case EStdKeyDevice1://右键 { ReportEventL((MCoeControlObserver::TCoeEvent)ECmdDeleteVideoContainer); break; } |
而View通过以下方法对上面代码所报告的事件进行处理。
void CAppView1::HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType) { switch(aEventType) {
case EMenuItemCmdBack: { ((CAVASAppUi*)(iEikonEnv->AppUi()))->HandleCommandL(EEikCmdExit); break; } case ECmdDeleteVideoContainer: { break; } default: break; } }
|
从上面的分析可以看出:
AppView通过继承自CAknView并通过ActivateLocalViewL()切换视图。
而AppView通过继承自MCoeControlObserver监听众多的Container,并在HandleControlEventL()里对Container所报告的事件进行响应。
分享到:
相关推荐
symbian多视图下开发的课程表源文件包 这是个源文件文件包,在cardide c++ 2.7中开发 用的是fp1 的sdk 屏幕分辨率 是240*320 这个软件的功能 本软件主要是为大学生这样的人开发 打开本软件看到的第一屏内容就是...
在压缩包中的“多视图模板”文件可能是Symbian 3th开发的一个起点,提供了基础的多视图结构框架的代码模板,帮助开发者快速搭建多视图应用的架构。开发者可以根据这个模板进行定制,添加自己的视图控制器、视图和...
在移动应用开发领域,尤其是在Symbian操作系统上,开发者们经常需要面对如何构建一个多视图的应用程序。为了简化这一过程,Carbide.C++ 提供了一个名为“S60 3rd 多视图工程模板”的工具,它基于Symbian 3rd Edition...
在这个视频讲座中,讲师将深入浅出地介绍多视图的概念、应用以及实现机制,为观众提供一个全面了解Symbian系统中界面设计和管理的窗口。 首先,我们来理解什么是“多视图”。在软件开发中,视图通常指的是用户界面...
在实际开发中,良好的视图切换不仅涉及代码逻辑,还涉及到界面的动画效果,比如淡入淡出、滑动等,这需要对Symbian的图形系统有深入理解。同时,为了保持性能,需要考虑如何有效地管理视图对象的生命周期,避免内存...
通过深入研究《Symbian S60 手机程序开发与实用教程》第三版及其随附的源代码,开发者可以逐步精通Symbian平台的开发,从而能够构建出适应市场需求的高质量移动应用。无论是对初学者还是有经验的开发者,这本书都是...
《基于Symbian OS的手机开发与应用》pdf电子版,共4个rar,作者:何伟//杨宗德//张兵,本书主要介绍基于Symbian平台的控制台应用程序和GUI应用程序的开发,内容涵盖开发平台的搭建、内存管理、描述符、动态数组、...
Qt是一个跨平台的C++图形用户界面应用程序开发框架,允许开发者在多个操作系统上构建应用程序,包括Windows、Linux、Mac OS X以及移动平台如Symbian。Symbian作为曾经流行的功能手机操作系统,虽然现在已被Android和...
《Symbian S60手机程序开发与实用教程》是一本深入浅出的教程,专为想要学习Symbian操作系统平台应用开发的读者设计。Symbian系统曾是智能手机市场的主导者,尤其在诺基亚的S60系列手机中广泛应用。这本书提供了全面...
【Symbian视频讲座-34多视图练习】是一场深入探讨Symbian操作系统中多视图编程技术的专业讲座,由北京航空航天大学分布与计算实验室主办。在移动设备开发领域,Symbian系统曾是广泛应用的操作系统,尤其是在智能...
通过深入学习Symbian OS的架构和S60平台的特性,开发者可以创造出能够在诺基亚S60设备上运行的高质量应用程序。尽管如今S60和Symbian已不再是主流,但它们在移动开发历史上的地位不容忽视,其开发经验对理解现代移动...
Series 60 应用程序开发 塞班学习经典书籍,s60开发的两本书,分别为4个和3个7zip分压缩包 Series 60 应用程序开发.pdf Symbian OS C++手机应用开发(第三版),用7zip分压的包,要用7zip打开就行(.001到.004的文件直接...
《Symbian S60 手机程序开发与实用教程(第3版)》是由杨常青和彭木根合著的一本专为Symbian S60平台开发者设计的教程,旨在帮助读者掌握在Symbian操作系统上构建应用程序的核心技术和实战技巧。Symbian S60是一个...
《Symbian Series 60应用程序开发》是针对智能手机平台Symbian OS上Series 60用户界面的应用程序设计指南,主要涵盖了Symbian C++和J2ME两种编程语言的开发技术。这本书深入探讨了如何在Symbian平台上创建高效、功能...
《Symbian OS 软件开发——应用C++开发智能手机应用程序入门》是针对Symbian操作系统进行软件开发的一本专业教程,旨在帮助开发者利用C++语言构建智能手机应用程序。Symbian OS曾是全球最广泛使用的智能手机操作系统...
《Symbian S60 手机程序开发与实用教程 Source Codes-Labs》是一本深入探讨Symbian S60平台应用程序开发的专业书籍,结合实际的代码实验室(Labs)来帮助读者理解并掌握Symbian操作系统上的软件开发技术。Symbian是...
"Carbide多视图模板"是专门为Symbian操作系统开发者设计的一款工具,它极大地简化了构建具有多个视图(views)和容器(containers)的应用程序框架的过程。在这个压缩包中,包含了三个主要部分:`classtemplates`、`...
symbian os c++ 应用程序开发教程 完整版 pdf symbian os c++ 应用程序开发教程 完整版 pdf symbian os c++ 应用程序开发教程 完整版 pdf symbian os c++ 应用程序开发教程 完整版 pdf