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创建并且拥有这俩个类,而且负责他们之间的切换