`
totoxian
  • 浏览: 1073931 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

深入探索Symbian多视图程序开发

阅读更多

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多视图下开发的课程表源文件包

    symbian多视图下开发的课程表源文件包 这是个源文件文件包,在cardide c++ 2.7中开发 用的是fp1 的sdk 屏幕分辨率 是240*320 这个软件的功能 本软件主要是为大学生这样的人开发 打开本软件看到的第一屏内容就是...

    SYMBIAN3th多视图结构框架

    在压缩包中的“多视图模板”文件可能是Symbian 3th开发的一个起点,提供了基础的多视图结构框架的代码模板,帮助开发者快速搭建多视图应用的架构。开发者可以根据这个模板进行定制,添加自己的视图控制器、视图和...

    Carbide.C++ S60 3rd 多视图工程模板

    在移动应用开发领域,尤其是在Symbian操作系统上,开发者们经常需要面对如何构建一个多视图的应用程序。为了简化这一过程,Carbide.C++ 提供了一个名为“S60 3rd 多视图工程模板”的工具,它基于Symbian 3rd Edition...

    Symbian视频讲座-33多视图概述

    在这个视频讲座中,讲师将深入浅出地介绍多视图的概念、应用以及实现机制,为观众提供一个全面了解Symbian系统中界面设计和管理的窗口。 首先,我们来理解什么是“多视图”。在软件开发中,视图通常指的是用户界面...

    LDLE.rar_symbian_视图切换

    在实际开发中,良好的视图切换不仅涉及代码逻辑,还涉及到界面的动画效果,比如淡入淡出、滑动等,这需要对Symbian的图形系统有深入理解。同时,为了保持性能,需要考虑如何有效地管理视图对象的生命周期,避免内存...

    Symbian S60 手机程序开发与实用教程(随书光盘)第三版

    通过深入研究《Symbian S60 手机程序开发与实用教程》第三版及其随附的源代码,开发者可以逐步精通Symbian平台的开发,从而能够构建出适应市场需求的高质量移动应用。无论是对初学者还是有经验的开发者,这本书都是...

    基于Symbian OS的手机开发与应用_part1

    《基于Symbian OS的手机开发与应用》pdf电子版,共4个rar,作者:何伟//杨宗德//张兵,本书主要介绍基于Symbian平台的控制台应用程序和GUI应用程序的开发,内容涵盖开发平台的搭建、内存管理、描述符、动态数组、...

    Qt开发Symbian实例程序

    Qt是一个跨平台的C++图形用户界面应用程序开发框架,允许开发者在多个操作系统上构建应用程序,包括Windows、Linux、Mac OS X以及移动平台如Symbian。Symbian作为曾经流行的功能手机操作系统,虽然现在已被Android和...

    《Symbian S60手机程序开发与实用教程》源代码_01

    《Symbian S60手机程序开发与实用教程》是一本深入浅出的教程,专为想要学习Symbian操作系统平台应用开发的读者设计。Symbian系统曾是智能手机市场的主导者,尤其在诺基亚的S60系列手机中广泛应用。这本书提供了全面...

    Symbian视频讲座-34多视图练习

    【Symbian视频讲座-34多视图练习】是一场深入探讨Symbian操作系统中多视图编程技术的专业讲座,由北京航空航天大学分布与计算实验室主办。在移动设备开发领域,Symbian系统曾是广泛应用的操作系统,尤其是在智能...

    Series 60应用程序开发(symbian).pdf

    通过深入学习Symbian OS的架构和S60平台的特性,开发者可以创造出能够在诺基亚S60设备上运行的高质量应用程序。尽管如今S60和Symbian已不再是主流,但它们在移动开发历史上的地位不容忽视,其开发经验对理解现代移动...

    Series 60 应用程序开发 塞班学习经典书籍 pdf4

    Series 60 应用程序开发 塞班学习经典书籍,s60开发的两本书,分别为4个和3个7zip分压缩包 Series 60 应用程序开发.pdf Symbian OS C++手机应用开发(第三版),用7zip分压的包,要用7zip打开就行(.001到.004的文件直接...

    Symbian S60 手机程序开发与实用教程(第3版)源代码

    《Symbian S60 手机程序开发与实用教程(第3版)》是由杨常青和彭木根合著的一本专为Symbian S60平台开发者设计的教程,旨在帮助读者掌握在Symbian操作系统上构建应用程序的核心技术和实战技巧。Symbian S60是一个...

    symbian Series 60应用程序开发(英文版)

    《Symbian Series 60应用程序开发》是针对智能手机平台Symbian OS上Series 60用户界面的应用程序设计指南,主要涵盖了Symbian C++和J2ME两种编程语言的开发技术。这本书深入探讨了如何在Symbian平台上创建高效、功能...

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

    《Symbian OS 软件开发——应用C++开发智能手机应用程序入门》是针对Symbian操作系统进行软件开发的一本专业教程,旨在帮助开发者利用C++语言构建智能手机应用程序。Symbian OS曾是全球最广泛使用的智能手机操作系统...

    Symbian S60 手机程序开发与实用教程 Source Codes-Labs

    《Symbian S60 手机程序开发与实用教程 Source Codes-Labs》是一本深入探讨Symbian S60平台应用程序开发的专业书籍,结合实际的代码实验室(Labs)来帮助读者理解并掌握Symbian操作系统上的软件开发技术。Symbian是...

    carbide多视图模板

    "Carbide多视图模板"是专门为Symbian操作系统开发者设计的一款工具,它极大地简化了构建具有多个视图(views)和容器(containers)的应用程序框架的过程。在这个压缩包中,包含了三个主要部分:`classtemplates`、`...

    symbian os c++ 应用程序开发教程 完整版 pdf

    symbian os c++ 应用程序开发教程 完整版 pdf symbian os c++ 应用程序开发教程 完整版 pdf symbian os c++ 应用程序开发教程 完整版 pdf symbian os c++ 应用程序开发教程 完整版 pdf

Global site tag (gtag.js) - Google Analytics