Classe CWaitCursor

Fornisce un modo per mostrare in una riga un cursore di attesa, in genere visualizzato come una clessidra, mentre si sta eseguendo un'operazione di lunga durata.

Sintassi

class CWaitCursor

Membri

Costruttori pubblici

Nome Descrizione
CWaitCursor::CWaitCursor Costruisce un CWaitCursor oggetto e visualizza il cursore di attesa.

Metodi pubblici

Nome Descrizione
CWaitCursor::Restore Ripristina il cursore di attesa dopo la modifica.

Osservazioni:

CWaitCursor non dispone di una classe di base.

Le procedure di programmazione di Windows consigliate richiedono di visualizzare un cursore di attesa ogni volta che si esegue un'operazione che richiede una notevole quantità di tempo.

Per visualizzare un cursore di attesa, è sufficiente definire una CWaitCursor variabile prima del codice che esegue l'operazione lunga. Il costruttore dell'oggetto determina automaticamente la visualizzazione del cursore di attesa.

Quando l'oggetto esce dall'ambito (alla fine del blocco in cui viene dichiarato l'oggetto CWaitCursor ), il distruttore imposta il cursore sul cursore precedente. In altre parole, l'oggetto esegue automaticamente la pulizia necessaria.

Nota

A causa del funzionamento dei costruttori e dei distruttori, CWaitCursor gli oggetti vengono sempre dichiarati come variabili locali, non vengono mai dichiarati come variabili globali né vengono allocati con new.

Se si esegue un'operazione che potrebbe causare la modifica del cursore, ad esempio la visualizzazione di una finestra di messaggio o di una finestra di dialogo, chiamare la funzione membro Ripristina per ripristinare il cursore di attesa. È possibile chiamare Restore anche quando è attualmente visualizzato un cursore di attesa.

Un altro modo per visualizzare un cursore di attesa consiste nell'usare la combinazione di CCmdTarget::BeginWaitCursor, CCmdTarget::EndWaitCursor e forse CCmdTarget::RestoreWaitCursor. Tuttavia, CWaitCursor è più facile da usare perché non è necessario impostare il cursore sul cursore precedente al termine dell'operazione lunga.

Nota

MFC imposta e ripristina il cursore usando la funzione virtuale CWinApp::D oWaitCursor . È possibile eseguire l'override di questa funzione per fornire un comportamento personalizzato.

Gerarchia di ereditarietà

CWaitCursor

Requisiti

Intestazione: afxwin.h

Esempio

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

Per visualizzare un cursore di attesa, è sufficiente dichiarare un CWaitCursor oggetto prima del codice che esegue l'operazione lunga.

CWaitCursor();

Osservazioni:

Il costruttore determina automaticamente la visualizzazione del cursore di attesa.

Quando l'oggetto esce dall'ambito (alla fine del blocco in cui viene dichiarato l'oggetto CWaitCursor ), il distruttore imposta il cursore sul cursore precedente. In altre parole, l'oggetto esegue automaticamente la pulizia necessaria.

È possibile sfruttare il fatto che il distruttore venga chiamato alla fine del blocco (che potrebbe essere prima della fine della funzione) per rendere attivo il cursore di attesa solo in parte della funzione. Questa tecnica è illustrata nel secondo esempio seguente.

Nota

A causa del funzionamento dei costruttori e dei distruttori, CWaitCursor gli oggetti vengono sempre dichiarati come variabili locali, non vengono mai dichiarati come variabili globali, né vengono allocati con new.

Esempio

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

Per ripristinare il cursore di attesa, chiamare questa funzione dopo l'esecuzione di un'operazione, ad esempio la visualizzazione di una finestra di messaggio o di una finestra di dialogo, che potrebbe modificare il cursore di attesa su un altro cursore.

void Restore();

Osservazioni:

È ok chiamare Restore anche quando il cursore di attesa è attualmente visualizzato.

Se è necessario ripristinare il cursore di attesa in una funzione diversa da quella in cui viene dichiarato l'oggetto CWaitCursor , è possibile chiamare CCmdTarget::RestoreWaitCursor.

Esempio

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

Vedi anche

Grafico della gerarchia
CCmdTarget::BeginWaitCursor
CCmdTarget::EndWaitCursor
CCmdTarget::RestoreWaitCursor
CWinApp::D oWaitCursor
Modificare il puntatore del mouse per una finestra in MFC usando Visual C++