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
Název | Popis |
---|---|
CWaitCursor::CWaitCursor | CWaitCursor Vytvoří objekt a zobrazí kurzor čekání. |
Veřejné metody
Název | 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++