Symbian 学习之基于视图的应用 关键函数的实现
2010-03-18 15:51:00 来源:WEB开发网1.构造与销毁
视图的构造是通过ConstructL()函数实现的,该函数以视图的资源ID作为参数调用基类的BaseConstructL()函数,通过资源文件创建视图。
视图的销毁在视图类的析构函数中实现。首先判断容器对象有没有被销毁,如果没有则需要从控件堆栈中弹出,然后销毁容器对象。代码如下:
CListView::~CListView()
{
if(iContainer!=NULL)
{
AppUi()->RemoveFromViewStack(*this,iContainer);
}
delete iContainer;
}
2.返回视图标识函数
应用程序的视图类需要重载CAknView::Id()函数,返回该视图的标识,实现代码如下:
TUid CListView::Id()const
{
return KViewId;
}
KViewId在CListView的头文件中定义,它是该视图的唯一标识,代码如下:
const TUid KViewId={1};
3.视图的激活与反激活
DoActivateL()函数和DoDeactivate()函数分别负责处理视图的激活和反激活事件。
视图创建后在显示视图之前应用程序框架调用它的DoActiveL()函数,该函数的主要功能是创建视图的容器对象,并把它压入控件堆栈中以响应按键事件,代码如下:
void CListView::DoActivateL(const TVwsViewId& ,TUid ,
const TDesC8& aCustomMessage*/)
{
if(!iContainer)
{
iContainer= new(Eleave)CListViewContainer;
iContainer->SetMopParent(this);
iContainer->ConstructL(ClientRect());
AppUi()->AddToStackL(*this,iContainer);
}
}
注意:开发人员要保证DoActivateL()函数尽快执行完毕,尤其注意不要在这个函数中加入等待用户响应的代码,否则可能会产生 “ViewSrv11”严重错误。
当程序切换到其他视图时,应用程序框架会调用视图类的DoDeactivate()函数,该函数的主要功能是将容器对象从控件堆栈弹出并销毁。
void CListView::DoDeactivate()
{
if(iContainer!=NULL)
{
AppUi()->RemoveFromViewStack(*this,iContainer);
}
更多精彩
赞助商链接