CAknWaitNoteWrapper 和MAknBackgroundProcess 配合

本文介绍了在Symbian系统中使用CAknWaitDialog和CAknWaitNoteWrapper实现等待对话框的方法,包括定义资源、创建对话框的具体步骤,并探讨了不同实现方式的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果想在工程中加个进度条,一搜你就会搜到CAknWaitDialog,CAknProgressDialog.其实,CAknWaitDialog是等待通知对话框,外观上看就是进度条始终是满,它一直等待某事件完成.这中间也可以按cancel结束等待.

具体如何使用,一搜一大把,很多是拷贝,这里说的稍微不同的.

等待对话框的使用步骤:

1.在资源文件中定义等待通知,方式和自定义通知类型

RESOURCE DIALOG ...

2.创建等待对话框

这里有两种选择

1)利用CAknWaitDialog实现,CAknWaitDialog*作为封装类的 数据成员,同时封装类继承 CActive.

具体可以参考下http://wiki.forum.nokia.com/index.php/Progress_and_wait_notes,不过这个没有实现用 活动对象,自己可以改下就可以啦.

2)利用CAknWaitNoteWrapper实现.

在封装类中  把 CAknWaitNoteWrapper* 作为数据成员,同时继承MAknBackgroundProcess类,重载其中的四个函数

 

void DialogDismissedL(TInt /*aButtonId*/);  //调用ProcessFinished后,调用此函数,如果用户终止了该处理,则框架首先调用DialogDismissedL(),然后调用IsProcessDone()检查处理是否结束,最后调用ProcessFinished()。


TBool IsProcessDone() const; //被活动对象调度器 反复调用查看 等待事件是否完成
void ProcessFinished();  //当 IsProcessDone 返回ETrue后,调用此函数做收尾工作
void StepL();  //如果还没有完成,被活动调度器 调用处理

 

初始化 CAknWaitNoteWrapper* waitNoteWrapper = CAknWaitNoteWrapper::NewL(); 以后可以直接用waitNoteWrapper->ExecuteL(R_WAITNOTE_SAVING_GAME_NOTE, *this)启动.

然后活动对象会多次调用 IsProcessDone 检查是否完成,未完成调用StepL处理函数;完成则依次调用ProcessFinished和DialogDismissedL.

若用于按 cancel取消,则框架首先调用DialogDismissedL(),然后调用IsProcessDone()检查处理是否结束,最后调用ProcessFinished()。

 

4.note

1)那为什么使用CAknWaitNoteWrapper方式,就不需要我们自己继承 CActive,实现活动对象呢,因为CAknWaitNoteWrapper给我们实现了,CAknWaitNoteWrapper 有人翻译是 "等待通知包装器". 看一下它的头文件 CAknWaitNoteWrapper.h 你就会发现 它继承CActive和MProgressDialogCallback . 而且有CAknWaitDialog指针对象做为类的数据成员. 所以它就是为懒人服务的,不需要你自己 去按第一种方法实现.

关键 运行ExecuteL后,执行了些什么, 框架最后调用 继承与MAknBackgroundProcess的封装类中的IsProcessDone等4个函数就不知道啦...

 

2)waitNoteWrapper->ExecuteL(R_WAITNOTE_SAVING_GAME_NOTE, *this) 函数是阻塞的,直到等待完成.

3)可以用于 启动时的建立连接过程,具体可以参考下SDK中AddressBook的connetion过程..

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值