CWaitCursor, classe

Permet en une ligne d'afficher un curseur d'attente, généralement sous forme de sablier, pendant que vous effectuez une longue opération.

Syntaxe

class CWaitCursor

Membres

Constructeurs publics

Nom Description
CWaitCursor ::CWaitCursor Construit un CWaitCursor objet et affiche le curseur d’attente.

Méthodes publiques

Nom Description
CWaitCursor ::Restore Restaure le curseur d’attente une fois qu’il a été modifié.

Notes

CWaitCursor n’a pas de classe de base.

De bonnes pratiques de programmation Windows nécessitent l’affichage d’un curseur d’attente chaque fois que vous effectuez une opération qui prend un certain temps.

Pour afficher un curseur d’attente, définissez simplement une CWaitCursor variable avant le code qui effectue l’opération longue. Le constructeur de l’objet entraîne automatiquement l’affichage du curseur d’attente.

Lorsque l’objet sort de l’étendue (à la fin du bloc dans lequel l’objet CWaitCursor est déclaré), son destructeur définit le curseur sur le curseur précédent. En d’autres termes, l’objet effectue automatiquement le nettoyage nécessaire.

Remarque

En raison de la façon dont leurs constructeurs et destructeurs fonctionnent, CWaitCursor les objets sont toujours déclarés en tant que variables locales , ils ne sont jamais déclarés comme variables globales ni alloués avec new.

Si vous effectuez une opération qui peut entraîner la modification du curseur, par exemple l’affichage d’une boîte de message ou d’une boîte de dialogue, appelez la fonction de membre Restore pour restaurer le curseur d’attente. Il est OK d’appeler Restore même lorsqu’un curseur d’attente est actuellement affiché.

Une autre façon d’afficher un curseur d’attente consiste à utiliser la combinaison de CCmdTarget ::BeginWaitCursor, CCmdTarget ::EndWaitCursor, et peut-être CCmdTarget ::RestoreWaitCursor. Toutefois, CWaitCursor il est plus facile d’utiliser, car vous n’avez pas besoin de définir le curseur sur le curseur précédent lorsque vous avez terminé l’opération longue.

Remarque

MFC définit et restaure le curseur à l’aide de la fonction virtuelle CWinApp ::D oWaitCursor . Vous pouvez remplacer cette fonction pour fournir un comportement personnalisé.

Hiérarchie d'héritage

CWaitCursor

Spécifications

En-tête : afxwin.h

Exemple

BOOL SomeLengthyProcess()
{
   CWaitCursor wait;
   //Do the lengthy processing.
   Sleep(1000);

   AfxMessageBox(_T("Some result")); //This changes the cursor.
   wait.Restore();                   //Restore the Wait cursor.
   //Continue Processing.
   Sleep(1000);

   //The destructor changes the cursor back to Regular cursor.
   return TRUE;
}

CWaitCursor ::CWaitCursor

Pour afficher un curseur d’attente, déclarez simplement un CWaitCursor objet avant le code qui effectue l’opération longue.

CWaitCursor();

Notes

Le constructeur entraîne automatiquement l’affichage du curseur d’attente.

Lorsque l’objet sort de l’étendue (à la fin du bloc dans lequel l’objet CWaitCursor est déclaré), son destructeur définit le curseur sur le curseur précédent. En d’autres termes, l’objet effectue automatiquement le nettoyage nécessaire.

Vous pouvez tirer parti du fait que le destructeur est appelé à la fin du bloc (qui peut être avant la fin de la fonction) pour activer le curseur d’attente uniquement dans une partie de votre fonction. Cette technique est illustrée dans le deuxième exemple ci-dessous.

Remarque

En raison de la façon dont leurs constructeurs et destructeurs fonctionnent, CWaitCursor les objets sont toujours déclarés en tant que variables locales , ils ne sont jamais déclarés comme variables globales, ni alloués avec new.

Exemple

// The following example illustrates the most common case
// of displaying the wait cursor during some lengthy
// processing.
void LengthyFunction()
{
   // perhaps you display a dialog box before displaying a
   // wait cursor

   CWaitCursor wait; // display wait cursor

   // do some lengthy processing
   Sleep(1000);

} // destructor automatically removes the wait cursor

// This example shows using a CWaitCursor object inside a block
// so the wait cursor is displayed only while the program is
// performing a lengthy operation.
void ConditionalFunction()
{
   if (SomeCondition)
   {
      CWaitCursor wait; // display wait cursor in this block only

      // do some lengthy processing
      Sleep(1000);

   } // at this point, the destructor removes the wait cursor
   else
   {
      // no wait cursor--only quick processing
   }
}

CWaitCursor ::Restore

Pour restaurer le curseur d’attente, appelez cette fonction après avoir effectué une opération, telle que l’affichage d’une boîte de message ou d’une boîte de dialogue, ce qui peut changer le curseur d’attente en un autre curseur.

void Restore();

Notes

Il est OK d’appeler Restore même lorsque le curseur d’attente est actuellement affiché.

Si vous devez restaurer le curseur d’attente dans une fonction autre que celle dans laquelle l’objet CWaitCursor est déclaré, vous pouvez appeler CCmdTarget ::RestoreWaitCursor.

Exemple

// This example illustrates performing an operation
// which changes the wait cursor. You should call
// CWaitCursor::Restore to restore the wait
// cursor after an operation which changes the cursor.
void AnotherLengthyFunction()
{
   CWaitCursor wait; // display wait cursor

   // do some lengthy processing
   Sleep(1000);

   // The dialog box will normally change the cursor to
   // the standard arrow cursor.
   CFileDialog dlg(TRUE);
   dlg.DoModal();

   // It is necessary to call Restore here in order
   // to change the cursor back to the wait cursor.
   wait.Restore();

   // do some more lengthy processing
   Sleep(1000);

   // destructor automatically removes the wait cursor
}

// If the wait cursor is changed by a function called by
// the function which created the wait cursor, you
// can call CCmdTarget::RestoreWaitCursor to restore
// the wait cursor.
void CalledFunction()
{
   CFileDialog dlg(TRUE);
   dlg.DoModal();

   // Since CWinApp is derived from CCmdTarget, we can use a
   // pointer to our application object to make the call to
   // CCmdTarget::RestoreWaitCursor.
   AfxGetApp()->RestoreWaitCursor();

   // Yet more lengthy processing...
   Sleep(1000);
}

Voir aussi

Graphique hiérarchique
CCmdTarget ::BeginWaitCursor
CCmdTarget ::EndWaitCursor
CCmdTarget ::RestoreWaitCursor
CWinApp ::D oWaitCursor
Modifier le pointeur de la souris pour une fenêtre dans MFC à l’aide de Visual C++