This example will demonstate the use of CAknWaitDialog in a typical Symbian C++ source code:
LIBRARY avkon.lib LIBRARY eikcdlg.lib LIBRARY eikctl.lib
// 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;
// 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.