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ą new
metody .
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ą new
metody .
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++