×
Namespaces

Variants
Actions

视图切换

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

兼容于
平台安全性
需要的签名: Self-Signed
能力: None

文章
翻译:
hoolee
最后由 hamishwillee 在 27 Aug 2012 编辑

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


后记

视图将被激活并切换.


See also

This page was last modified on 27 August 2012, at 05:11.
117 page views in the last 30 days.
×