WEB开发网
开发学院手机开发Symbian 开发 Symbian 学习之基于视图的应用 关键函数的实现 阅读

Symbian 学习之基于视图的应用 关键函数的实现

 2010-03-18 15:51:00 来源:WEB开发网   
核心提示:delete iContainer;iContainer=NULL;}使用delete语句销毁容器对象时,只是释放了该对象的内存空间,Symbian 学习之基于视图的应用 关键函数的实现(2),并没有将该对象的指针置为NULL,如果之后的程序代码仍会使用该指针,好处是通用的菜单项发生变化时,无须修改各个视图类的实现代码

delete iContainer;

iContainer=NULL;

}

使用delete语句销毁容器对象时,只是释放了该对象的内存空间,并没有将该对象的指针置为NULL。如果之后的程序代码仍会使用该指针,发现该指针不为空,会认为这个对象仍存在,从而导致错误访问。

4.处理用户命令

HandleCommandL()函数负责处理用户的命令,主要是菜单命令。系统首先调用视图类的HandleCommandL()函数,该函数只有一个 TInt类型的参数,代表菜单命令ID。通过判断这个命令ID,如果是视图特有的命令,则在视图类中处理,如果是应用程序范围内的命令,则转发给 AppUi类的HandleCommandL()函数处理。代码实现如下:

#include "MymultiView.hrh" //需要包含的头文件

void CListView::HandleCommandL(TInt aCommand)

{

switch ( aCommand )

{

case EMyMultiViewCmdList: //EMyMultiViewCmdList 在mymultiview.rss和mymultiview.hrh中定义

{

iEikonEnv->InfoMsg( _L("Command from Listview") );

break;

}

case EAknSoftkeyBack:

{

AppUi()->HandleCommandL(EEikCmdExit);

break;

}

default:

{

AppUi()->HandleCommandL( aCommand );

break;

}

}

}

这里的EMyMultiViewCmdList是视图类特有的命令,所以在CListView类中处理。而 EAknSoftkeyBack命令式应用程序通用的菜单命令,因此交给AppUi类处理。这里的其他菜单命令也交给AppUi类处理,好处是通用的菜单项发生变化时,无须修改各个视图类的实现代码。

AppUi类的HandleCommandL()函数负责处理通用菜单命令。CMyMultiViewAppUi 类的HandleCommandL()函数实现如下:

void CMyMultiViewAppUi::HandleCommandL(TInt aCommand)

{

switch ( aCommand )

{

case EEikCmdExit:

{

Exit();

break;

}

case EMyMultiViewCmdAppTest:

{

iEikonEnv->InfoMsg(_L("test"));

break;

}

Tags:

编辑录入:coldstar [复制链接] [打 印]
赞助商链接