Symbian 学习之基于视图的应用 关键函数的实现
2010-03-18 15:51:00 来源:WEB开发网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;
}
更多精彩
赞助商链接