Sdílet prostřednictvím


CWaitCursor – třída

Poskytuje jednosměrný způsob zobrazení kurzoru čekání, který se obvykle zobrazuje jako přesýpací hodiny, zatímco provádíte zdlouhavou operaci.

Syntaxe

class CWaitCursor

Členové

Veřejné konstruktory

Jméno popis
CWaitCursor::CWaitCursor CWaitCursor Vytvoří objekt a zobrazí kurzor čekání.

Veřejné metody

Jméno popis
CWaitCursor::Restore Obnoví kurzor čekání po změně.

Poznámky

CWaitCursor nemá základní třídu.

Dobré postupy programování systému Windows vyžadují, abyste zobrazili kurzor čekání, kdykoli provádíte operaci, která trvá značné množství času.

Pokud chcete zobrazit kurzor čekání, stačí definovat proměnnou CWaitCursor před kódem, který provede dlouhou operaci. Konstruktor objektu automaticky způsobí zobrazení kurzoru čekání.

Když objekt přejde mimo rozsah (na konci bloku, ve kterém CWaitCursor je objekt deklarován), jeho destruktor nastaví kurzor na předchozí kurzor. Jinými slovy, objekt provede nezbytné vyčištění automaticky.

Poznámka

Vzhledem k tomu, jak jejich konstruktory a destruktory fungují, CWaitCursor jsou objekty vždy deklarovány jako místní proměnné – nikdy nejsou deklarovány jako globální proměnné ani nejsou přiděleny new.

Pokud provedete operaci, která může způsobit, že se kurzor změní, například zobrazení pole zprávy nebo dialogového okna, zavolejte funkci Obnovit člen, aby se obnovil kurzor čekání. Je v pořádku volat Restore , i když je právě zobrazen kurzor čekání.

Dalším způsobem zobrazení kurzoru čekání je použití kombinace CCmdTarget::BeginWaitCursor, CCmdTarget::EndWaitCursor a možná CCmdTarget::RestoreWaitCursor. Použití je ale jednodušší, CWaitCursor protože po dokončení zdlouhavé operace nemusíte nastavovat kurzor na předchozí kurzor.

Poznámka

MFC nastaví a obnoví kurzor pomocí virtuální funkce CWinApp::D oWaitCursor . Tuto funkci můžete přepsat tak, aby poskytovala vlastní chování.

Hierarchie dědičnosti

CWaitCursor

Požadavky

Hlavička: afxwin.h

Příklad

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

Pokud chcete zobrazit kurzor čekání, stačí deklarovat CWaitCursor objekt před kódem, který provádí zdlouhavou operaci.

CWaitCursor();

Poznámky

Konstruktor automaticky způsobí zobrazení kurzoru čekání.

Když objekt přejde mimo rozsah (na konci bloku, ve kterém CWaitCursor je objekt deklarován), jeho destruktor nastaví kurzor na předchozí kurzor. Jinými slovy, objekt provede nezbytné vyčištění automaticky.

Můžete využít skutečnost, že destruktor je volána na konci bloku (který může být před koncem funkce), aby kurzor čekání byl aktivní pouze v části vaší funkce. Tato technika je znázorněna v druhém příkladu níže.

Poznámka

Vzhledem k tomu, jak jejich konstruktory a destruktory fungují, CWaitCursor jsou objekty vždy deklarovány jako místní proměnné – nikdy nejsou deklarovány jako globální proměnné, ani nejsou přiděleny new.

Příklad

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

Chcete-li obnovit kurzor čekání, zavolejte tuto funkci po provedení operace, například zobrazení pole zprávy nebo dialogového okna, které může změnit kurzor čekání na jiný kurzor.

void Restore();

Poznámky

Volání je v pořádku Restore i v případě, že je právě zobrazen kurzor čekání.

Pokud potřebujete obnovit kurzor čekání v jiné funkci než ve funkci, ve které CWaitCursor je objekt deklarován, můžete volat CCmdTarget::RestoreWaitCursor.

Příklad

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

Viz také

Graf hierarchie
CCmdTarget::BeginWaitCursor
CCmdTarget::EndWaitCursor
CCmdTarget::RestoreWaitCursor
CWinApp::D oWaitCursor
Změna ukazatele myši pro okno v prostředí MFC pomocí jazyka Visual C++