×
Namespaces

Variants
Actions

使用CAknGlobalMsgQuery显示一个全局信息询问框

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

文章
hoolee 在 07 Aug 2008 创建
最后由 hamishwillee 在 15 Dec 2011 编辑

CS001059


设备, 软件 版本: S60 3rd Edition, FP2


Contents

详细描述

下列代码片段演示了如何生成一个全局的信息询问框CAknGlobaMsgQuery. 我们可以通过调用NewL()方法生成一个全局信息问询框,并使用ShowMsgQueryL()执行。必须通过创建一个活动对象来处理对话框的撤销。这个示例使用的是一个通用类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_header_text
{
buf = "<header text here>";
}
 
RESOURCE TBUF r_global_query_message_text
{
buf = "<message text here>";
}


头文件

  • 监视接口
#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
  • container/observer
#ifndef GLOBALQUERYCONTAINER_H
#define GLOBALQUERYCONTAINER_H
 
#include <coecntrl.h> // CCoeControl
#include "GlobalQueryObserver.h"
#include <aknglobalmsgquery.h> //CAknGlobalMsgQuery
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;
CAknGlobalMsgQuery* iGlobalMsgQuery;
};
#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();
}
  • container/observer
#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 message query
iQueryHandlerAO = CGlobalQueryHandlerAO::NewL(*this);
iQueryHandlerAO->StartHandler();
 
iGlobalMsgQuery = CAknGlobalMsgQuery::NewL();
HBufC* headerText = StringLoader::LoadLC(R_GLOBAL_QUERY_HEADER_TEXT);
HBufC* messageText = StringLoader::LoadLC(R_GLOBAL_QUERY_MESSAGE_TEXT);
 
//show the global message query
iGlobalMsgQuery->ShowMsgQueryL(iQueryHandlerAO->iStatus,
*messageText,
R_AVKON_SOFTKEYS_OK_CANCEL,
*headerText,
KNullDesC);
 
CleanupStack::PopAndDestroy(2); //messageText, headerText
}
 
CGlobalQueryContainer::~CGlobalQueryContainer()
{
//...
delete iQueryHandlerAO;
delete iGlobalMsgQuery;
}
 
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
}
This page was last modified on 15 December 2011, at 08:57.
40 page views in the last 30 days.
×