Compartir a través de


CWaitCursor (clase)

Proporciona una manera de una línea de mostrar un cursor de espera, que se muestra normalmente como un reloj de arena, mientras se está realizando una operación larga.

Sintaxis

class CWaitCursor

Miembros

Constructores públicos

Nombre Descripción
CWaitCursor::CWaitCursor Construye un objeto CWaitCursor y muestra el cursor de espera.

Métodos públicos

Nombre Descripción
CWaitCursor::Restore Restaura el cursor de espera después de cambiarlo.

Comentarios

CWaitCursor no tiene una clase base.

Las buenas prácticas de programación de Windows requieren que muestre un cursor de espera cada vez que realice una operación que tarde un período de tiempo considerable.

Para mostrar un cursor de espera, defina una variable CWaitCursor antes del código que realiza la operación larga. El constructor del objeto hace que el cursor de espera se muestre automáticamente.

Cuando el objeto sale del ámbito (al final del bloque en el que se declara el objeto CWaitCursor), su destructor establece el cursor en el cursor anterior. En otras palabras, el objeto realiza la limpieza necesaria automáticamente.

Nota:

Debido al funcionamiento de sus constructores y destructores, los objetos CWaitCursor siempre se declaran como variables locales, es decir, nunca se declaran como variables globales ni se asignan con new.

Si realiza una operación que pueda cambiar el cursor, como mostrar un cuadro de mensaje o un cuadro de diálogo, llame a la función miembro Restore para restaurar el cursor de espera. Puede llamar a Restore incluso cuando se muestra un cursor de espera.

Otra manera de mostrar un cursor de espera es usar la combinación de CCmdTarget::BeginWaitCursor, CCmdTarget::EndWaitCursor y, quizás, CCmdTarget::RestoreWaitCursor. Sin embargo, CWaitCursor es más fácil de usar porque no es necesario establecer el cursor en el cursor anterior cuando haya terminado con la operación larga.

Nota:

MFC establece y restaura el cursor mediante la función virtual CWinApp::DoWaitCursor. Puede invalidar esta función para proporcionar un comportamiento personalizado.

Jerarquía de herencia

CWaitCursor

Requisitos

Encabezado: afxwin.h

Ejemplo

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

Para mostrar un cursor de espera, declare un objeto CWaitCursor antes del código que realiza la operación larga.

CWaitCursor();

Comentarios

El constructor hace que el cursor de espera se muestre automáticamente.

Cuando el objeto sale del ámbito (al final del bloque en el que se declara el objeto CWaitCursor), su destructor establece el cursor en el cursor anterior. En otras palabras, el objeto realiza la limpieza necesaria automáticamente.

Puede aprovechar el hecho de que se llama al destructor al final del bloque (que puede que esté antes del final de la función) para que hacer que el cursor de espera esté activo solo en parte de la función. Esta técnica se muestra en el segundo ejemplo a continuación.

Nota:

Debido al funcionamiento de sus constructores y destructores, los objetos CWaitCursor siempre se declaran como variables locales, es decir, nunca se declaran como variables globales, ni se asignan con new.

Ejemplo

// 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

Para restaurar el cursor de espera, llame a esta función después de realizar una operación, como mostrar un cuadro de mensaje o un cuadro de diálogo, lo que puede que cambie el cursor de espera a otro cursor.

void Restore();

Comentarios

Puede llamar a Restore incluso cuando se muestra el cursor de espera.

Si necesita restaurar el cursor de espera mientras está en una función distinta de aquella en la que se declara el objeto CWaitCursor, puede llamar a CCmdTarget::RestoreWaitCursor.

Ejemplo

// 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);
}

Consulte también

Gráfico de jerarquías
CCmdTarget::BeginWaitCursor
CCmdTarget::EndWaitCursor
CCmdTarget::RestoreWaitCursor
CWinApp::DoWaitCursor
Cambiar el puntero del mouse para una ventana en MFC mediante Visual C++