CWaitCursor-Klasse

Ermöglicht mit einer Befehlszeile die Anzeige eines Wartecursors (normalerweise in Form einer Sanduhr), während ein längeren Vorgang ausgeführt wird.

Syntax

class CWaitCursor

Member

Öffentliche Konstruktoren

Name Beschreibung
CWaitCursor::CWaitCursor Erstellt ein CWaitCursor Objekt und zeigt den Wartecursor an.

Öffentliche Methoden

Name Beschreibung
CWaitCursor::Restore Stellt den Wartecursor wieder her, nachdem er geändert wurde.

Hinweise

CWaitCursor besitzt keine Basisklasse.

Bei guten Programmierpraktiken für Windows müssen Sie einen Wartecursor immer dann anzeigen, wenn Sie einen Vorgang ausführen, der eine spürbare Zeit in Anspruch nimmt.

Um einen Wartecursor anzuzeigen, definieren Sie einfach eine CWaitCursor Variable vor dem Code, der den langwierigen Vorgang ausführt. Der Konstruktor des Objekts bewirkt automatisch, dass der Wartecursor angezeigt wird.

Wenn das Objekt außerhalb des Gültigkeitsbereichs liegt (am Ende des Blocks, in dem das CWaitCursor Objekt deklariert wird), legt dessen Destruktor den Cursor auf den vorherigen Cursor fest. Mit anderen Worten: Das Objekt führt automatisch die erforderliche sauber-Up aus.

Hinweis

Da ihre Konstruktoren und Destruktoren funktionieren, CWaitCursor werden Objekte immer als lokale Variablen deklariert – sie werden niemals als globale Variablen deklariert oder zugewiesen new.

Wenn Sie einen Vorgang ausführen, der dazu führen kann, dass der Cursor geändert wird, z. B. das Anzeigen eines Meldungsfelds oder Dialogfelds, rufen Sie die Funktion "Member wiederherstellen " auf, um den Wartecursor wiederherzustellen. Es ist in Ordnung, auch dann aufzurufen Restore , wenn derzeit ein Wartecursor angezeigt wird.

Eine weitere Möglichkeit zum Anzeigen eines Wartecursors besteht darin, die Kombination aus CCmdTarget::BeginWaitCursor, CCmdTarget::EndWaitCursor und vielleicht CCmdTarget::RestoreWaitCursor zu verwenden. Die Verwendung ist jedoch einfacher, CWaitCursor da Sie den Cursor nicht auf den vorherigen Cursor festlegen müssen, wenn Sie mit dem langen Vorgang fertig sind.

Hinweis

MFC legt den Cursor mithilfe der virtuellen Funktion CWinApp::D oWaitCursor fest und stellt den Cursor wieder her. Sie können diese Funktion außer Kraft setzen, um benutzerdefiniertes Verhalten bereitzustellen.

Vererbungshierarchie

CWaitCursor

Anforderungen

Header: afxwin.h

Beispiel

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

Um einen Wartecursor anzuzeigen, deklarieren Sie einfach ein CWaitCursor Objekt vor dem Code, der den langwierigen Vorgang ausführt.

CWaitCursor();

Hinweise

Der Konstruktor bewirkt automatisch, dass der Wartecursor angezeigt wird.

Wenn das Objekt außerhalb des Gültigkeitsbereichs liegt (am Ende des Blocks, in dem das CWaitCursor Objekt deklariert wird), legt dessen Destruktor den Cursor auf den vorherigen Cursor fest. Mit anderen Worten: Das Objekt führt automatisch die erforderliche sauber-Up aus.

Sie können die Tatsache nutzen, dass der Destruktor am Ende des Blocks aufgerufen wird (was möglicherweise vor dem Ende der Funktion liegt), um den Wartecursor nur in einem Teil der Funktion zu aktivieren. Diese Technik wird im zweiten Beispiel unten gezeigt.

Hinweis

Da ihre Konstruktoren und Destruktoren funktionieren, CWaitCursor werden Objekte immer als lokale Variablen deklariert – sie werden niemals als globale Variablen deklariert, noch werden sie zugewiesen new.

Beispiel

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

Um den Wartecursor wiederherzustellen, rufen Sie diese Funktion nach dem Ausführen eines Vorgangs auf, z. B. das Anzeigen eines Meldungsfelds oder Dialogfelds, das den Wartecursor möglicherweise in einen anderen Cursor ändert.

void Restore();

Hinweise

Es ist ok, auch dann aufzurufen Restore , wenn der Wartecursor zurzeit angezeigt wird.

Wenn Sie den Wartecursor in einer anderen Funktion als der Funktion wiederherstellen müssen, in der das CWaitCursor Objekt deklariert ist, können Sie CCmdTarget::RestoreWaitCursor aufrufen.

Beispiel

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

Siehe auch

Hierarchiediagramm
CCmdTarget::BeginWaitCursor
CCmdTarget::EndWaitCursor
CCmdTarget::RestoreWaitCursor
CWinApp::D oWaitCursor
Ändern des Mauszeigers für ein Fenster in MFC mithilfe von Visual C++