现在的位置: 首页 > 综合 > 正文

Symbian S60 多视图结构的理解

2013年08月21日 ⁄ 综合 ⁄ 共 22198字 ⁄ 字号 评论关闭

S60平台的视图架构中,核心组件是AppUi类 视图类 容器类

      AppUi类------(继承自CAknViewAppUi) 

我们定义的AppUi类继承自CAknViewAppUi是专门为视图应用程序准备的AppUi类,这个类实现了一些视图管理功能例如视图的注册,注销,切换等

      视图类 -------(继承自CAknView)

CAknView直接继承自CBase类,是Avkon中的视图基类,S60平台的视图类都要从该类派生,该类实现了MCoeView接口类,实现了该接口中定义的一个纯虚函数,并返回了这个视图的唯一标识,视图服务器通过这个标识访问和控制每个视图

      容器类 -------(继承自CCoeControl)

容器类派生自CCoeControl类,是一个复合的控件,可以理解成包含了界面上其他控件的控件

从视图的角度看,视图只负责显示和控制一个复合控件,并且把需要响应的事件都交给该复合控件处理,而复合控件把这些事件分发给各个子控件.

       在我的示例程序TestMultiView中有

 

TestMultiView,

TestMultiViewDocument,

TestMultiViewApplication,

TestMultiViewAppUi,

TestMultiViewAppView,

TestMultiViewAppView111,

TestMultiViewAppContainer,

TestMultiViewAppContainer111一共八个类

 

其中的前面四个类是应用程序框架类,所有的 Symbian OS都使用这种框架

 

 

 

 

TestMultiViewAppContainer,TestMultiViewAppContainer111是俩个容器类。分别在俩个视图中显示,他们都是控件继承自CCoeControl

下面我们依次分析各个类:

 

1:TestMultiViewAppUi:

实现如下:

 

TestMultiViewAppView类的定义如下:

实现如下:

 

TestMultiViewAppView111和上面的实现是一样的 就是const TUid KView2Id = {2};

实现如下:

 

 

 TestMultiViewAppContainer的定义和实现代码:

实现如下:

 

 

TestMultiViewAppContainer111的定义和实现代码:

实现:

 

 

这样的话他们的关键部分已经写的差不多了 下面看看资源文件的定义

TestMultiView.rss:

 

TestMultiView.hrh:

 

TestMultiView.rls:

 

 

TestMultiViewAppView,和TestMultiViewAppView111俩个类是俩个视图类他们都派生自CAKnView类,TestMultiViewAppUi创建并且拥有这俩个类,而且负责他们之间的切换

抱歉!评论已关闭.