Udostępnij za pośrednictwem


Klasa CWaitCursor

Zapewnia jednowierszowy sposób wyświetlania kursora oczekiwania, który jest zwykle wyświetlany jako klepsydry, podczas gdy wykonujesz długotrwałą operację.

Składnia

class CWaitCursor

Elementy członkowskie

Konstruktory publiczne

Nazwa/nazwisko opis
CWaitCursor::CWaitCursor CWaitCursor Tworzy obiekt i wyświetla kursor oczekiwania.

Metody publiczne

Nazwa/nazwisko opis
CWaitCursor::Restore Przywraca kursor oczekiwania po jego zmianie.

Uwagi

CWaitCursor nie ma klasy bazowej.

Dobre praktyki programistyczne systemu Windows wymagają wyświetlenia kursora oczekiwania za każdym razem, gdy wykonujesz operację, która zajmuje zauważalny czas.

Aby wyświetlić kursor oczekiwania, po prostu zdefiniuj zmienną CWaitCursor przed kodem, który wykonuje długotrwałą operację. Konstruktor obiektu automatycznie powoduje wyświetlenie kursora oczekiwania.

Gdy obiekt wykracza poza zakres (na końcu bloku, w którym CWaitCursor zadeklarowany jest obiekt), jego destruktor ustawia kursor na poprzedni kursor. Innymi słowy, obiekt automatycznie wykonuje niezbędne czyszczenie.

Uwaga

Ze względu na sposób działania CWaitCursor konstruktorów i destruktorów obiekty są zawsze deklarowane jako zmienne lokalne — nigdy nie są deklarowane jako zmienne globalne ani przydzielane za pomocą newmetody .

Jeśli wykonasz operację, która może spowodować zmianę kursora, na przykład wyświetlenie okna dialogowego lub okna dialogowego, wywołaj funkcję elementu członkowskiego Przywróć , aby przywrócić kursor oczekiwania. Jest w porządku, aby wywołać Restore nawet wtedy, gdy kursor oczekiwania jest obecnie wyświetlany.

Innym sposobem wyświetlania kursora oczekiwania jest użycie kombinacji CCmdTarget::BeginWaitCursor, CCmdTarget::EndWaitCursor i być może CCmdTarget::RestoreWaitCursor. Jest jednak łatwiejsze w użyciu, CWaitCursor ponieważ nie trzeba ustawiać kursora na poprzedni kursor po zakończeniu długotrwałej operacji.

Uwaga

MFC ustawia i przywraca kursor przy użyciu funkcji wirtualnej CWinApp::D oWaitCursor . Tę funkcję można zastąpić, aby zapewnić zachowanie niestandardowe.

Hierarchia dziedziczenia

CWaitCursor

Wymagania

Nagłówek: afxwin.h

Przykład

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

Aby wyświetlić kursor oczekiwania, po prostu zadeklaruj CWaitCursor obiekt przed kodem, który wykonuje długotrwałą operację.

CWaitCursor();

Uwagi

Konstruktor automatycznie powoduje wyświetlenie kursora oczekiwania.

Gdy obiekt wykracza poza zakres (na końcu bloku, w którym CWaitCursor zadeklarowany jest obiekt), jego destruktor ustawia kursor na poprzedni kursor. Innymi słowy, obiekt automatycznie wykonuje niezbędne czyszczenie.

Możesz skorzystać z faktu, że destruktor jest wywoływany na końcu bloku (co może być przed końcem funkcji), aby kursor oczekiwania był aktywny tylko w części funkcji. Ta technika jest pokazana w drugim przykładzie poniżej.

Uwaga

Ze względu na sposób działania CWaitCursor konstruktorów i destruktorów obiekty są zawsze deklarowane jako zmienne lokalne — nigdy nie są deklarowane jako zmienne globalne ani przydzielane za pomocą newmetody .

Przykład

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

Aby przywrócić kursor oczekiwania, wywołaj tę funkcję po wykonaniu operacji, na przykład wyświetlenie okna dialogowego lub okna dialogowego, co może zmienić kursor oczekiwania na inny kursor.

void Restore();

Uwagi

Można wywołać Restore wywołanie nawet wtedy, gdy kursor oczekiwania jest obecnie wyświetlany.

Jeśli musisz przywrócić kursor oczekiwania w funkcji innej niż CWaitCursor zadeklarowana przez obiekt, możesz wywołać obiekt CCmdTarget::RestoreWaitCursor.

Przykład

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

Zobacz też

Wykres hierarchii
CCmdTarget::BeginWaitCursor
CCmdTarget::EndWaitCursor
CCmdTarget::RestoreWaitCursor
CWinApp::D oWaitCursor
Zmienianie wskaźnika myszy dla okna w MFC przy użyciu języka Visual C++