This page was last modified 06:53, 9 July 2008.
CS001060 - 使用CAknGlobalConfirmationQuery显示一个全局确认查询框
From Forum Nokia Wiki
| ID | CS001060 | Creation date | July 3, 2008 |
| Platform | S60 3rd Edition, FP1 | Tested on devices | Nokia N93 |
| Category | Symbian C++ | Subcategory | Files/Data |
| Keywords (APIs, classes, methods, functions): CAknGlobalConfirmationQuery, StringLoader,
CAknGlobalConfirmationQuery::NewL(), CAknGlobalConfirmationQuery::ShowConfirmationQueryL(), StringLoader::LoadLC() |
概述
这段代码演示如何创建全局确认对话框CAknGlobalConfirmationQuery。通过调用NewL()方法构造全局确认对话框,然后使用ShowConfirmationQueryL()方法来执行。必须构造一个活动对象以处理对话框的关闭。本例使用通用类CGlobalQueryHandlerAO,这个类也用在其它全局查询代码片段中。类CGlobalQueryContainer用于调出查询框,它也是观察者,实现了MGlobalQueryObserver接口。
这段代码能用自签名。
MMP文件
下面的库文件是必须的:
LIBRARY cone.lib //CEikonEnv, CCoeEnv LIBRARY avkon.lib //Avkon resources LIBRARY CommonEngine.lib //StringLoader LIBRARY euser.lib //CActive, CleanupStack
资源文件
.rss
#include <eikon.rh> #include <avkon.rsg> #include <avkon.rh> //... RESOURCE TBUF r_global_query_confirmation_text { buf = "<confirmation text here>"; }
Header files
- observer interface
#ifndef GLOBALQUERYOBSERVER_H #define GLOBALQUERYOBSERVER_H class MGlobalQueryObserver { public: //keep these methods short running because they are called //from within an active object virtual void ProcessOkOptionL() = 0; virtual void ProcessCancelOptionL() = 0; virtual void ProcessDoneOptionL() = 0; virtual void ProcessSelectedItemL(const TInt aItem) = 0; }; #endif // GLOBALQUERYOBSERVER_H
- 处理器-活动对象
#ifndef GLOBALQUERYHANDLERAO_H #define GLOBALQUERYHANDLERAO_H #include <e32base.h> //CActive #include "GlobalQueryObserver.h" class CGlobalQueryHandlerAO : public CActive { public: ~CGlobalQueryHandlerAO(); static CGlobalQueryHandlerAO* NewL(MGlobalQueryObserver& aObserver); static CGlobalQueryHandlerAO* NewLC(MGlobalQueryObserver& aObserver); public: void StartHandler(); private: CGlobalQueryHandlerAO(MGlobalQueryObserver& aObserver) : CActive (EPriorityStandard), iObserver(aObserver){}; void ConstructL(); private: // from CActive void RunL(); void DoCancel(); private: // data MGlobalQueryObserver& iObserver; }; #endif //GLOBALQUERYHANDLERAO_H
- 容器/观察者
#ifndef GLOBALQUERYCONTAINER_H #define GLOBALQUERYCONTAINER_H #include <coecntrl.h> // CCoeControl #include "GlobalQueryObserver.h" #include <aknglobalconfirmationquery.h> //CAknGlobalConfirmationQuery class CGlobalQueryHandlerAO; class CGlobalQueryContainer : public CCoeControl, MGlobalQueryObserver { public: //... void MakeExampleQueryL(); public: // from MGlobalQueryObserver void ProcessOkOptionL(); void ProcessCancelOptionL(); void ProcessDoneOptionL(); //not used void ProcessSelectedItemL(const TInt aItem); //not used //... private: CGlobalQueryHandlerAO* iQueryHandlerAO; CAknGlobalConfirmationQuery* iGlobalConfirmationQuery ; }; #endif // GLOBALQUERYCONTAINER_H
源代码文件
- 处理器-活动对象
#include "GlobalQueryHandlerAO.h" #include <avkon.hrh> //EAknSoftkeyOk, EAknSoftkeyCancel, EAknSoftkeyDone CGlobalQueryHandlerAO::~CGlobalQueryHandlerAO() { Cancel(); } void CGlobalQueryHandlerAO::ConstructL() { CActiveScheduler::Add(this); } CGlobalQueryHandlerAO* CGlobalQueryHandlerAO::NewLC(MGlobalQueryObserver& aObserver) { CGlobalQueryHandlerAO* self = new (ELeave) CGlobalQueryHandlerAO(aObserver); CleanupStack::PushL(self); self->ConstructL(); return self; } CGlobalQueryHandlerAO* CGlobalQueryHandlerAO::NewL(MGlobalQueryObserver& aObserver) { CGlobalQueryHandlerAO* self = CGlobalQueryHandlerAO::NewLC(aObserver); CleanupStack::Pop(self); return self; } void CGlobalQueryHandlerAO::DoCancel(){} void CGlobalQueryHandlerAO::StartHandler() { SetActive(); } void CGlobalQueryHandlerAO::RunL() { if (iStatus == EAknSoftkeyOk) iObserver.ProcessOkOptionL(); else if(iStatus == EAknSoftkeyCancel) iObserver.ProcessCancelOptionL(); else if(iStatus == EAknSoftkeyDone) iObserver.ProcessDoneOptionL(); else iObserver.ProcessSelectedItemL(iStatus.Int()); Cancel(); }
- 容器/观察者
#include "GlobalQueryContainer.h" //CGlobalQueryContainer #include "GlobalQueryHandlerAO.h" //CGlobalQueryHandlerAO #include <GlobalQuery_0xED0C36BE.rsg> //Resources #include <StringLoader.h> // StringLoader void CGlobalQueryContainer::ConstructL(const TRect& aRect) { CreateWindowL(); SetRect(aRect); ActivateL(); MakeExampleQueryL(); } void CGlobalQueryContainer::MakeExampleQueryL() { //start the query handler and show global confirmation query iQueryHandlerAO = CGlobalQueryHandlerAO::NewL(*this); iQueryHandlerAO->StartHandler(); iGlobalConfirmationQuery = CAknGlobalConfirmationQuery::NewL(); HBufC* confirmationText = StringLoader::LoadLC(R_GLOBAL_QUERY_CONFIRMATION_TEXT); iGlobalConfirmationQuery->ShowConfirmationQueryL (iQueryHandlerAO->iStatus, *confirmationText, R_AVKON_SOFTKEYS_OK_CANCEL, R_QGN_NOTE_INFO_ANIM); CleanupStack::PopAndDestroy(); //confirmationText } CGlobalQueryContainer::~CGlobalQueryContainer() { //... delete iQueryHandlerAO; delete iGlobalConfirmationQuery; } void CGlobalQueryContainer::ProcessOkOptionL() { //OK pressed, do something iEikonEnv->InfoWinL(_L("OK"),_L("Pressed")); } void CGlobalQueryContainer::ProcessCancelOptionL() { //Cancel pressed, do something... iEikonEnv->InfoWinL(_L("Cancel"),_L("Pressed")); } void CGlobalQueryContainer::ProcessDoneOptionL() { //not used } void CGlobalQueryContainer::ProcessSelectedItemL(const TInt /*aItem*/) { //not used }
后者条件
样例代码演示了如何创建一个全局确认查询框、处理查询框的关闭、以及活动对象处理器如何通知观察者类对话框已关闭。

