Partilhar via


Classe CWaitCursor

Oferece um modo de uma linha para mostrar um cursor de espera, que geralmente é exibido como uma ampulheta, enquanto você está fazendo uma operação longa.

Sintaxe

class CWaitCursor

Membros

Construtores públicos

Nome Descrição
CWaitCursor::CWaitCursor Constrói um objeto CWaitCursor e exibe o cursor de espera.

Métodos públicos

Nome Descrição
CWaitCursor::Restore Restaura o cursor de espera depois que ele é alterado.

Comentários

CWaitCursor não tem uma classe base.

Boas práticas de programação do Windows exigem que você exiba um cursor de espera sempre que estiver executando uma operação que leve um tempo perceptível.

Para exibir um cursor de espera, basta definir uma variável CWaitCursor antes do código que executa a operação longa. O construtor do objeto faz com que o cursor de espera seja exibido automaticamente.

Quando o objeto sai do escopo (no final do bloco no qual o objeto CWaitCursor é declarado), seu destruidor define o cursor como o cursor anterior. Em outras palavras, o objeto executa a limpeza necessária automaticamente.

Observação

Devido à forma como seus construtores e destruidores funcionam, os objetos CWaitCursor são sempre declarados como variáveis locais. Eles nunca são declarados como variáveis globais nem são alocados com new.

Se você executar uma operação que pode fazer com que o cursor seja alterado, como exibir uma caixa de mensagem ou caixa de diálogo, chame a função Restaurar membro para restaurar o cursor de espera. Não há problema em chamar Restore mesmo quando um cursor de espera é exibido no momento.

Outra maneira de exibir um cursor de espera é usar a combinação de CCmdTarget::BeginWaitCursor, CCmdTarget::EndWaitCursor e, talvez, CCmdTarget::RestoreWaitCursor. No entanto, CWaitCursor é mais fácil de usar porque você não precisa definir o cursor para o cursor anterior quando terminar a operação demorada.

Observação

O MFC define e restaura o cursor usando a função virtual CWinApp::D oWaitCursor. Você pode substituir essa função para fornecer comportamento personalizado.

Hierarquia de herança

CWaitCursor

Requisitos

Cabeçalho: afxwin.h

Exemplo

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 exibir um cursor de espera, basta declarar um objeto CWaitCursor antes do código que executa a operação longa.

CWaitCursor();

Comentários

O construtor faz com que o cursor de espera seja exibido automaticamente.

Quando o objeto sai do escopo (no final do bloco no qual o objeto CWaitCursor é declarado), seu destruidor define o cursor como o cursor anterior. Em outras palavras, o objeto executa a limpeza necessária automaticamente.

Aproveite o fato de que o destruidor é chamado no final do bloco (que pode ser antes do final da função) para tornar o cursor de espera ativo em apenas parte de sua função. Essa técnica é mostrada no segundo exemplo abaixo.

Observação

Devido à forma como seus construtores e destruidores funcionam, os objetos CWaitCursor são sempre declarados como variáveis locais. Eles nunca são declarados como variáveis globais, nem são alocados com new.

Exemplo

// 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 o cursor de espera, chame essa função depois de executar uma operação, como exibir uma caixa de mensagem ou caixa de diálogo, que pode alterar o cursor de espera para outro cursor.

void Restore();

Comentários

Não há problema em chamar Restore mesmo quando um cursor de espera é exibido no momento.

Se você precisar restaurar o cursor de espera em uma função diferente daquela em que o objeto CWaitCursor é declarado, você pode chamar CCmdTarget::RestoreWaitCursor.

Exemplo

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

Confira também

Gráfico da hierarquia
CCmdTarget::BeginWaitCursor
CCmdTarget::EndWaitCursor
CCmdTarget::RestoreWaitCursor
CWinApp::DoWaitCursor
Alterar o ponteiro do mouse para uma janela no MFC usando o Visual C++