symbian 中view与container
2010-05-19 18:31:00 来源:WEB开发网另两个函数ComponentControl和CountComponentControls分别获取控件与获取控件个数,在依赖于控件展示的 GUI应用中则更为重要。
因为它实现了接口MCoeControlObserver,所以函数HandleControlEventL也需要实现一下。
利用它的成员iCoeEnv可以取到AppUi类的指针,不过需要强制转型一下,如:STATIC_CAST(CiMusicAppUi*,iCoeEnv->AppUi())->...
二. 基于CAknView的MVC模式
这种模式的特点是在AppUi类与Container类之间增加一个AppView的类,即一个AppUi对象,N个AppView和N个 Container。
除了公共的三个文件以外,它包括的文件有:
4) 有一个以工程名+AppUi命名的类,派生于CAknViewAppUi类,其实也是间接派生于CAknAppUi类,它的工作职责与常规模式中的 AppUi类也基本相同。
唯一的区别在于它不是直接创建Container类,而是创建AppView类,并且是创建多个AppView类。同时它还需要负责将创建的 view加入视图栈里AddViewL。
CiMusicViewMusic* view1 = new (ELeave) CiMusicViewMusic;
CleanupStack::PushL( view1 );
view1->ConstructL();
AddViewL( view1 ); // transfer ownership to CAknViewAppUi
CleanupStack::Pop(); // view1
CiMusicViewFavt* view2 = new (ELeave) CiMusicViewFavt;
CleanupStack::PushL( view2 );
view2->ConstructL();
AddViewL( view2 ); // transfer ownership to CAknViewAppUi
CleanupStack::Pop(); // view2
CiMusicViewWeb* view3 = new (ELeave) CiMusicViewWeb;
CleanupStack::PushL( view3 );
view3->ConstructL();
AddViewL( view3 ); // transfer ownership to CAknViewAppUi
CleanupStack::Pop(); // view3
this->ActivateLocalViewL(KViewMusicId);
5)有多个以工程名+View命名的类,派生于CAknView类。它负责分担AppUi部分事件的处理,所以,它也有 HandleCommandL函数。
此外,它的DoActivateL和DoDeactivate两个函数在当前视图激活或失活时被调用,需要重载一下。
在激活时,需要创建视图对应的Container类,并且调用Container的SetMopParent为自己,还要在上层的AppUi中将这个Container加入栈中。一般代码如下:
更多精彩
赞助商链接