您的位置:首页 > 大数据 > 人工智能

How to use the CAknWaitDialog

2010-04-23 11:50 260 查看
This example will demonstate the use of CAknWaitDialog in a typical Symbian C++ source code:

In the mmp file:
LIBRARY avkon.lib
LIBRARY eikcdlg.lib
LIBRARY eikctl.lib

In the header file:
// System Includes
#include <aknprogressdialog.h> // for MProgressDialogCallback

// FORWARD DECLARATIONS
class CAknWaitDialog;

class CMyClass : public CBase,
public MTestActiveObjNotifier,
public MProgressDialogCallback
{
// ...

private: // From MTestActiveObjNotifier

/**
* Get the notification about the connection
* from the registered CTestActiveObj.
*/
void NotifyConnection(TInt aError);

private:// From MProgressDialogCallback

/**
* Get's called when a dialog is dismissed.
*/
void DialogDismissedL(TInt aButtonId);

// ...
private: // New functions

/**
* Stars the wait dialog.
* /param aResourceId The dialog resource id.
*/
void StartWaitDialog(const TDesC& aLabel);

/**
* Stops the wait dialog.
*/
void StopWaitDialog();

// ...
private: // Member data

/**
* TODO: This is a samle Active Object class,
* use your AO here.
* Owned by CMyClass.
*/
CTestActiveObj* iTestActiveObj;

/**
* The wait dialog.
* Owned by CMyClass.
*/
CAknWaitDialog* iWaitDialog;

In the cpp file:
// System includes
#include <aknwaitdialog.h> // for CAknWaitDialog

// ----------------------------------------------------------------------------
// CMyClass::~CMyClass()
// Destructor
// ----------------------------------------------------------------------------
//
CMyClass::~CMyClass()
{
// ...
if(iWaitDialog)
{
delete iWaitDialog;
iWaitDialog = NULL;
}

if(iTestActiveObj)
{
delete iTestActiveObj;
iTestActiveObj = NULL;
}
// ...
}

// ----------------------------------------------------------------------------
// CMyClass::ConstructL()
// Two phase constructor
// ----------------------------------------------------------------------------
//
void CMyClass::ConstructL()
{
// TODO: Register the Active Object here.
// In this example it'll call the NotifyConnection()
// after the connection.
iTestActiveObj = CTestActiveObj::NewL(*this);
}

// ----------------------------------------------------------------------------
// CMyClass::DialogDismissedL(TInt aButtonId)
// Get's called when a dialog is dismissed.
// ----------------------------------------------------------------------------
//
void CMyClass::DialogDismissedL(TInt /*aButtonId*/)
{
// No implementation required.
}

// ----------------------------------------------------------------------------
// CMyClass::StartWaitDialog(const TDesC& aLabel)
// Stars the wait dialog.
// ----------------------------------------------------------------------------
//
void CMyClass::StartWaitDialog(const TDesC& aLabel)
{
if(iWaitDialog)
{
delete iWaitDialog;
iWaitDialog = NULL;
}

// For the wait dialog
iWaitDialog = new (ELeave) CAknWaitDialog(
REINTERPRET_CAST(CEikDialog**, &iWaitDialog));
iWaitDialog->SetCallback(this);
iWaitDialog->SetTextL(aLabel);
iWaitDialog->ExecuteLD(1);//R_TEST_WAITNOTE);
}

// ----------------------------------------------------------------------------
// CMyClass::StopWaitDialog()
// Stops the wait dialog.
// ----------------------------------------------------------------------------
//
void CMyClass::StopWaitDialog()
{
// For wait dialog
iWaitDialog->ProcessFinishedL();
iWaitDialog = NULL;
}

// ----------------------------------------------------------------------------
// CMyClass::MakeConnection()
// Create a connection.
// ----------------------------------------------------------------------------
//
void CMyClass::MakeConnection()
{
// TODO: The below function call is a sample here
// sending some request to an Active Object
iTestActiveObj->Connect();

// Now start the wait dialog.
StartWaitDialog(_L("Connecting..."));
}

// ----------------------------------------------------------------------------
// CMyClass::NotifyConnection()
// This will notify when ever a connection happend.
// ----------------------------------------------------------------------------
//
void CMyClass::NotifyConnection(TInt /*aError*/)
{
// This is also a sample implementation.

// Now stop the wait dialog when ever a connectin
// notification has come.
StopWaitDialog();
}
Note: You should have a basic understanding of Active Objects and the knowledge of the working of Mixin-class.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: