视图切换
文章信息
Contents |
概述
下列代码演示了如何切换视图,这段代码使用了Avkon视图切换框架类CAknView。
为什么以及何时要用到视图?
- 当你的程序有多个屏幕显示,有着复杂的导向性时;
- 当你需要对视图切换进行存储数据时,以便进入视图时显示最新的更新数据
- 当你需要从一个屏幕向另一个或外部程序发送数据时
- CAknView处理菜单命令,切换视图,向相关容器类发送键盘/触摸事件
- 简单的程序不需要从CAknView派生视图
S60视图框架一般用在S60平台的程序,每个视图都有自己的空间堆栈,视图框架使用CAknViewAppUi类来做UI控制器。这个UI控制器管理一个或多个CAknView派生类。而视图类则操控从CCoeControl派生的控件。
MMP文件
需要下列能力及链接库:
CAPABILITY None
LIBRARY avkon.lib
LIBRARY eikcore.lib
LIBTATY eiksrv.lib
头文件
#include <aknview.h>
#include <aknviewappui.h>
源文件
Application app UI class CAknViewAppUi creates the default view on its construction.
void CSomeAppUi::ContructL()
{
BaseConstructL(EAknEnableSkin);
// Create your view derived from CAknView
iMyView = CMyView::NewL();
// Add view into control stack
AddViewL(iMyView);
// Use this as a default view
SetDefaultViewL(*iMyView);
}
CAknView 激活视图. DoActivateL()则当用户不需要视图时由视图server来调用
void CSomeView::DoActivateL(const TVwsViewId& aPrevViewId,
TUid aCustomMessageId,
const TDesC8& aCustomMessage)
{
if (iSomeControl == NULL)
{
// Create control for the view
iSomeControl = CSomeContainer::NewL(ClientRect());
// Add it to control stack
AppUi()->AddToStackL(*this, iSomeControl);
}
}
void CSomeView::DoDeactivate()
{
if (iSomeControl != NULL)
{
// Remove view from the control stack
AppUi()->RemoveFromViewStack(*this, iSomeControl);
// Delete view
delete iSomeControl;
iSomeControl = NULL;
}
}
在你的程序切换视图时可以使用AppUi类的ActivateLocalViewL()方法,首先新视图被激活,然后前一个视图被调用DoDeactivate方法
const TUid KSomeViewId = { 1 }; // UID of the some view
ActivateLocalViewL(KSomeViewId); // activate some view
后记
视图将被激活并切换.


(no comments yet)