symbian 中view与container
2010-05-19 18:31:00 来源:WEB开发网iContainer = new (ELeave) CiMusicContainerFavt;
iContainer->SetMopParent(this);
iContainer->ConstructL( AppUi()->ApplicationRect() );
iContainer->listType=type;
AppUi()->AddToStackL( *this, iContainer );
注意,它的AppUi()可以得到它的上层的AppUi对象指针。
失活时则正好相反,需要
if ( iContainer )
...{
AppUi()->RemoveFromViewStack( *this, iContainer );
}
delete iContainer;
iContainer = NULL;
6)有多个以工程名+Container命名的类,派生于CCoeControl并实现接口MCoeControlObserver,所以它的行为与常规模式中的Container类似。
这种模式可以有效地组织应用程序,根据应用的多个功能界面切割成数个模块(视图)。由多个AppView来分担AppUi中的事件处理,负责自己这个视图下的具体行为与显示。
各个视图之间的切换也很简单:
STATIC_CAST(CiMusicAppUi*,iCoeEnv->AppUi())->ActivateLocalViewL(KViewMusicId);
[补充]
三 比较两种模式
有些教材还提出过对话框模式,但是我觉得那似乎不太实用,也没注意过它的结构组成。
对比上述两种架构模板,很显然,第二种基于视图的模板应该更有实用性一点,除非程序实在简单。
不过,这里的“视图”很容易让人产生误解。一般我们说MVC的时候,模型-视图-控制器,但是这里的AppView其实对应的控制器,而 Container对应的则是视图。
所以在新的SDK里,第一种模板中由向导生成的工程中源于CCoeControl的类名改成了AppView,对应继承于CAknAppUi控制器的类名叫AppUi。因为我没有看到多视图的工程生成的代码,如果这样的话,估计也应该对应的改一下吧。
更多精彩
赞助商链接