background image

6.

AddToStackL(iAppContainer); //将 Container 推入到控件栈顶,例

 

如可以接收键事件

 

7.

}  

8.

 

注意:如果使用这种架构实现带有多个视图的应用程序,则通过使用

AddToStackL()和

RemoveFromStackL()在不同的容器之间切换。

2)基于对话框的架构

它不同于传统

Symbian OS 架构的是,它拥有的控件直接从对话框类家族继承而来。

对话框的主要优点是:相对于直接从

CcoeControl 派生而来的控件,它需要较少的开发工

作,因为它们自动管理子控件的布局。

AppUi 类中完成构造和运行:

1.

void CsimpleDlgAppUi::ConstructL()  

2.

{  

3.

BaseConstructL();  

4.

IAppDialog=new(ELeave) CsimpleDlgDialog;  

5.

IAppDialog->SetMopParent(this);  

6.

IAppDialog->ExecuteLD(R_SIMPLEDLG_DIALOG);  

7.

AddToStackL(iAppDialog);  

8.

}  

9.

 

因为对话框是无模式的,

ExecuteLD()将在调用后立刻返回。必须使用

AddToStackL()将对话框添加到控件栈中,因为无模式的对话框无法自己完成这项工作。
还有,必须在

AppUi 的析构函数中销毁该对话框:

1.

CsimpleDlgAppUi::~CsimpleDlgAppUi()  

2.

{  

3.

if(iAppDialog)  

4.

{  

5.

RemoveFromStack(iAppDialog);  

6.

delete iAppDialog;  

7.

}  

8.

}  

9.

 

3Avkon 视图切换架构

比前两种都复杂,引入另一个类作为

AppUi 和容器之间的媒介。另外,AppUi 类从

CAknViewAppUi 继承,而不是继承于 CaknAppUi。
前两个架构,

AppUi 直接负责处理视图切换,它必须管理视图提交控件的实例化、删除和

显示。但是,基于

CaknView 的类在这方面可以很明显地减少 AppUi 地任务。

AppUi 仍然处理视图切换的请求,但现在,并不是删除旧的容器并实例化新的容器,
AppUi 只需要调用它的其中一个特殊视图激活函数,如 ActiveViewL()。这些特殊的
CaknViewAppUi 函数向 View 服务器提交一个激活请求,然后通过基于 CaknView 的相