Поделиться через


Класс CWaitCursor

Предоставляет односторонний способ отображения курсора ожидания (который обычно отображается как песочные часы) при выполнении длительной операции.

Синтаксис

class CWaitCursor

Участники

Открытые конструкторы

Имя Описание
CWaitCursor::CWaitCursor CWaitCursor Создает объект и отображает курсор ожидания.

Открытые методы

Имя Описание
CWaitCursor::Restore Восстанавливает курсор ожидания после изменения.

Замечания

CWaitCursor не имеет базового класса.

Для правильной практики программирования Windows требуется отображать курсор ожидания всякий раз, когда выполняется операция, которая занимает заметное время.

Чтобы отобразить курсор ожидания, просто определите CWaitCursor переменную перед кодом, выполняющим длинную операцию. Конструктор объекта автоматически приводит к отображению курсора ожидания.

Когда объект выходит из области (в конце блока, в котором CWaitCursor объявлен объект), его деструктор устанавливает курсор на предыдущий курсор. Другими словами, объект выполняет необходимую очистку автоматически.

Примечание.

Из-за того, как работают их конструкторы и деструкторы, CWaitCursor объекты всегда объявляются как локальные переменные— они никогда не объявляются как глобальные переменные и не выделяются.new

Если вы выполняете операцию, которая может привести к изменению курсора, например отображение окна сообщения или диалогового окна, вызовите функцию элемента восстановления для восстановления курсора ожидания. Это нормально вызывать Restore даже при отображении курсора ожидания.

Другой способ отображения курсора ожидания — использовать сочетание CCmdTarget::BeginWaitCursor, CCmdTarget::EndWaitCursor и, возможно, CCmdTarget::RestoreWaitCursor. Тем не менее, проще использовать, CWaitCursor так как вам не нужно устанавливать курсор на предыдущий курсор при выполнении длительной операции.

Примечание.

MFC задает и восстанавливает курсор с помощью виртуальной функции CWinApp::D oWaitCursor . Эту функцию можно переопределить, чтобы обеспечить настраиваемое поведение.

Иерархия наследования

CWaitCursor

Требования

Заголовок: afxwin.h

Пример

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

Чтобы отобразить курсор ожидания, просто объявите CWaitCursor объект перед кодом, выполняющим длинную операцию.

CWaitCursor();

Замечания

Конструктор автоматически приводит к отображению курсора ожидания.

Когда объект выходит из области (в конце блока, в котором CWaitCursor объявлен объект), его деструктор устанавливает курсор на предыдущий курсор. Другими словами, объект выполняет необходимую очистку автоматически.

Вы можете воспользоваться тем, что деструктор вызывается в конце блока (который может быть до конца функции), чтобы сделать курсор ожидания активным только в части функции. Этот метод показан во втором примере ниже.

Примечание.

Из-за того, как работают их конструкторы и деструкторы, CWaitCursor объекты всегда объявляются как локальные переменные— они никогда не объявляются как глобальные переменные, и не выделяются вместе.new

Пример

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

Чтобы восстановить курсор ожидания, вызовите эту функцию после выполнения операции, например отображение окна сообщения или диалогового окна, которое может изменить курсор ожидания на другой курсор.

void Restore();

Замечания

Он подходит для вызова Restore даже при отображении курсора ожидания.

Если необходимо восстановить курсор ожидания во время выполнения функции, отличной от функции, в которой CWaitCursor объявлен объект, можно вызвать CCmdTarget::RestoreWaitCursor.

Пример

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

См. также

Диаграмма иерархии
CCmdTarget::BeginWaitCursor
CCmdTarget::EndWaitCursor
CCmdTarget::RestoreWaitCursor
CWinApp::D oWaitCursor
Изменение указателя мыши для окна в MFC с помощью Visual C++