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.
(
3)Avkon 视图切换架构
比前两种都复杂,引入另一个类作为
AppUi 和容器之间的媒介。另外,AppUi 类从
CAknViewAppUi 继承,而不是继承于 CaknAppUi。
前两个架构,
AppUi 直接负责处理视图切换,它必须管理视图提交控件的实例化、删除和
显示。但是,基于
CaknView 的类在这方面可以很明显地减少 AppUi 地任务。
AppUi 仍然处理视图切换的请求,但现在,并不是删除旧的容器并实例化新的容器,
AppUi 只需要调用它的其中一个特殊视图激活函数,如 ActiveViewL()。这些特殊的
CaknViewAppUi 函数向 View 服务器提交一个激活请求,然后通过基于 CaknView 的相