CCmdTarget Klasa

Klasa podstawowa dla architektury message-map biblioteki klas programu Microsoft Foundation.

Składnia

class CCmdTarget : public CObject

Członkowie

Konstruktory publiczne

Nazwa/nazwisko opis
CCmdTarget::CCmdTarget CCmdTarget Tworzy obiekt.

Metody publiczne

Nazwa/nazwisko opis
CCmdTarget::BeginWaitCursor Wyświetla kursor jako kursor klepsydry.
CCmdTarget::DoOleVerb Powoduje wykonanie akcji określonej przez zlecenie OLE.
CCmdTarget::EnableAutomation Umożliwia automatyzację CCmdTarget OLE dla obiektu.
CCmdTarget::EnableConnections Włącza wyzwalanie zdarzeń przez punkty połączenia.
CCmdTarget::EnableTypeLib Włącza bibliotekę typów obiektu.
CCmdTarget::EndWaitCursor Wraca do poprzedniego kursora.
CCmdTarget::EnumOleVerbs Wylicza czasowniki OLE obiektu.
CCmdTarget::FromIDispatch Zwraca wskaźnik do obiektu skojarzonego CCmdTarget ze wskaźnikiem IDispatch .
CCmdTarget::GetDispatchIID Pobiera podstawowy identyfikator interfejsu wysyłania.
CCmdTarget::GetIDispatch Zwraca wskaźnik do obiektu skojarzonego IDispatch z obiektem CCmdTarget .
CCmdTarget::GetTypeInfoCount Pobiera liczbę interfejsów informacyjnych typu zapewnianych przez obiekt.
CCmdTarget::GetTypeInfoOfGuid Pobiera opis typu odpowiadający określonemu identyfikatorowi GUID.
CCmdTarget::GetTypeLib Pobiera wskaźnik do biblioteki typów.
CCmdTarget::GetTypeLibCache Pobiera pamięć podręczną biblioteki typów.
CCmdTarget::IsInvokeAllowed Włącza wywołanie metody automatyzacji.
CCmdTarget::IsResultExpected Zwraca wartość niezerową, jeśli funkcja automatyzacji powinna zwrócić wartość.
CCmdTarget::OnCmdMsg Kieruje i wysyła komunikaty poleceń.
CCmdTarget::OnFinalRelease Czyści się po wydaniu ostatniego odwołania OLE.
CCmdTarget::RestoreWaitCursor Przywraca kursor klepsydry.

Uwagi

Mapa komunikatów kieruje polecenia lub komunikaty do funkcji składowych, które zapisujesz w celu ich obsługi. (Polecenie to komunikat z elementu menu, przycisku polecenia lub klawisza akceleratora).

Kluczowe klasy struktury pochodzące z CCmdTarget elementów include CView, CWinApp, CDocument, CWndi CFrameWnd. Jeśli zamierzasz, aby nowa klasa obsługiwała komunikaty, należy utworzyć klasę z jednej z tych CCmdTargetklas pochodnych. Rzadko będziesz pochodzić z klasy bezpośrednio CCmdTarget .

Aby zapoznać się z omówieniem obiektów docelowych poleceń i OnCmdMsg routingu, zobacz Elementy docelowe poleceń, Routing poleceń i Komunikaty mapowania.

CCmdTarget zawiera funkcje składowe obsługujące wyświetlanie kursora klepsydry. Wyświetla kursor klepsydry, gdy oczekujesz, że wykonanie polecenia zajmie zauważalny interwał czasu.

Mapy wysyłania, podobnie jak mapy komunikatów, są używane do uwidaczniania funkcji automatyzacji IDispatch OLE. Uwidaczniając ten interfejs, inne aplikacje (takie jak Visual Basic) mogą wywoływać aplikację.

Hierarchia dziedziczenia

Cobject

CCmdTarget

Wymagania

Nagłówka:afxwin.h

CCmdTarget::BeginWaitCursor

Wywołaj tę funkcję, aby wyświetlić kursor jako klepsydry, gdy oczekujesz, że wykonanie polecenia zajmie zauważalny interwał czasu.

void BeginWaitCursor();

Uwagi

Struktura wywołuje tę funkcję, aby pokazać użytkownikowi, że jest zajęty, na przykład gdy CDocument obiekt ładuje lub zapisuje się w pliku.

Akcje nie zawsze są skuteczne poza jedną procedurą obsługi komunikatów, ponieważ inne akcje BeginWaitCursor , takie jak OnSetCursor obsługa, mogą zmienić kursor.

Wywołaj metodę EndWaitCursor , aby przywrócić poprzedni kursor.

Przykład

// The following example illustrates the most common case
// of displaying the hourglass cursor during some lengthy
// processing of a command handler implemented in some
// CCmdTarget-derived class, such as a document or view.
void CMyView::OnBeginSleepEnd()
{
   BeginWaitCursor(); // display the hourglass cursor
   // do some lengthy processing
   Sleep(3000);
   EndWaitCursor(); // remove the hourglass cursor
}

// The next example illustrates RestoreWaitCursor.
void CMyView::OnBeginDlgRestore()
{
   BeginWaitCursor(); // display the hourglass cursor
   // do some lengthy processing
   // The dialog box will normally change the cursor to
   // the standard arrow cursor, and leave the cursor in
   // as the standard arrow cursor when the dialog box is
   // closed.
   CFileDialog dlg(TRUE);
   dlg.DoModal();

   // It is necessary to call RestoreWaitCursor here in order
   // to change the cursor back to the hourglass cursor.
   RestoreWaitCursor();
   // do some more lengthy processing
   Sleep(3000);
   EndWaitCursor(); // remove the hourglass cursor
}

// In the above example, the dialog was clearly invoked between
// the pair of calls to BeginWaitCursor and EndWaitCursor.
// Sometimes it may not be clear whether the dialog is invoked
// in between a pair of calls to BeginWaitCursor and EndWaitCursor.
// It is permissible to call RestoreWaitCursor, even if
// BeginWaitCursor was not previously called.  This case is
// illustrated below, where CMyView::AnotherFunction does not
// need to know whether it was called in the context of an
// hourglass cursor.
void CMyView::OnDlgRestore()
{
   // some processing ...
   CFileDialog dlg(TRUE);
   dlg.DoModal();
   RestoreWaitCursor();

   // some more processing ...
}

// If the dialog is invoked from a member function of
// some non-CCmdTarget, then you can call CWinApp::DoWaitCursor
// with a 0 parameter value to restore the hourglass cursor.
void CMyObject::OnDlgDoWait()
{
   CFileDialog dlg(TRUE);
   dlg.DoModal();
   AfxGetApp()->DoWaitCursor(0); // same as CCmdTarget::RestoreWaitCursor
}

CCmdTarget::CCmdTarget

CCmdTarget Tworzy obiekt.

CCmdTarget();

CCmdTarget::DoOleVerb

Powoduje wykonanie akcji określonej przez zlecenie OLE.

BOOL DoOleVerb(
    LONG iVerb,
    LPMSG lpMsg,
    HWND hWndParent,
    LPCRECT lpRect);

Parametry

iVerb
Identyfikator liczbowy czasownika.

lpMsg
Wskaźnik do MSG struktury opisującej zdarzenie (na przykład dwukrotne kliknięcie), które wywołało czasownik.

hWndParent
Obsługa okna dokumentu zawierającego obiekt.

lpRect
Wskaźnik do RECT struktury zawierającej współrzędne w pikselach, które definiują prostokąt ograniczenia obiektu w .hWndParent

Wartość zwracana

TRUE jeśli operacja powiedzie się, w przeciwnym razie FALSE.

Uwagi

Ta funkcja składowa jest w zasadzie implementacją .IOleObject::DoVerb Możliwe akcje są wyliczane przez element CCmdTarget::EnumOleVerbs.

CCmdTarget::EnableAutomation

Wywołaj tę funkcję, aby włączyć automatyzację OLE dla obiektu.

void EnableAutomation();

Uwagi

Ta funkcja jest zwykle wywoływana z konstruktora obiektu i powinna być wywoływana tylko wtedy, gdy mapa wysyłki została zadeklarowana dla klasy. Aby uzyskać więcej informacji na temat automatyzacji, zobacz artykuły Klienty automatyzacji i serwery automatyzacji.

CCmdTarget::EnableConnections

Włącza wyzwalanie zdarzeń przez punkty połączenia.

void EnableConnections();

Uwagi

Aby włączyć punkty połączenia, wywołaj tę funkcję składową w konstruktorze klasy pochodnej.

CCmdTarget::EnableTypeLib

Włącza bibliotekę typów obiektu.

void EnableTypeLib();

Uwagi

Wywołaj tę funkcję składową w konstruktorze obiektu -pochodnego CCmdTarget, jeśli zawiera informacje o typie.

CCmdTarget::EndWaitCursor

Wywołaj tę funkcję po wywołaniu funkcji składowej BeginWaitCursor , aby powrócić z kursora klepsydry do poprzedniego kursora.

void EndWaitCursor();

Uwagi

Struktura wywołuje również tę funkcję składową po wywołaniu kursora klepsydry.

Przykład

// The following example illustrates the most common case
// of displaying the hourglass cursor during some lengthy
// processing of a command handler implemented in some
// CCmdTarget-derived class, such as a document or view.
void CMyView::OnBeginSleepEnd()
{
   BeginWaitCursor(); // display the hourglass cursor
   // do some lengthy processing
   Sleep(3000);
   EndWaitCursor(); // remove the hourglass cursor
}

// The next example illustrates RestoreWaitCursor.
void CMyView::OnBeginDlgRestore()
{
   BeginWaitCursor(); // display the hourglass cursor
   // do some lengthy processing
   // The dialog box will normally change the cursor to
   // the standard arrow cursor, and leave the cursor in
   // as the standard arrow cursor when the dialog box is
   // closed.
   CFileDialog dlg(TRUE);
   dlg.DoModal();

   // It is necessary to call RestoreWaitCursor here in order
   // to change the cursor back to the hourglass cursor.
   RestoreWaitCursor();
   // do some more lengthy processing
   Sleep(3000);
   EndWaitCursor(); // remove the hourglass cursor
}

// In the above example, the dialog was clearly invoked between
// the pair of calls to BeginWaitCursor and EndWaitCursor.
// Sometimes it may not be clear whether the dialog is invoked
// in between a pair of calls to BeginWaitCursor and EndWaitCursor.
// It is permissible to call RestoreWaitCursor, even if
// BeginWaitCursor was not previously called.  This case is
// illustrated below, where CMyView::AnotherFunction does not
// need to know whether it was called in the context of an
// hourglass cursor.
void CMyView::OnDlgRestore()
{
   // some processing ...
   CFileDialog dlg(TRUE);
   dlg.DoModal();
   RestoreWaitCursor();

   // some more processing ...
}

// If the dialog is invoked from a member function of
// some non-CCmdTarget, then you can call CWinApp::DoWaitCursor
// with a 0 parameter value to restore the hourglass cursor.
void CMyObject::OnDlgDoWait()
{
   CFileDialog dlg(TRUE);
   dlg.DoModal();
   AfxGetApp()->DoWaitCursor(0); // same as CCmdTarget::RestoreWaitCursor
}

CCmdTarget::EnumOleVerbs

Wylicza czasowniki OLE obiektu.

BOOL EnumOleVerbs(LPENUMOLEVERB* ppenumOleVerb);

Parametry

ppenumOleVerb
Wskaźnik do wskaźnika do interfejsu IEnumOLEVERB .

Wartość zwracana

TRUE jeśli obiekt obsługuje co najmniej jedno zlecenie OLE (w którym przypadku *ppenumOleVerb wskazuje IEnumOLEVERB interfejs modułu wyliczającego), w przeciwnym razie FALSE.

Uwagi

Ta funkcja składowa jest w zasadzie implementacją .IOleObject::EnumVerbs

CCmdTarget::FromIDispatch

Wywołaj tę funkcję, aby zamapować IDispatch wskaźnik, odebrany z funkcji składowych automatyzacji klasy, do CCmdTarget obiektu, który implementuje interfejsy IDispatch obiektu.

static CCmdTarget* PASCAL FromIDispatch(LPDISPATCH lpDispatch);

Parametry

lpDispatch
Wskaźnik do IDispatch obiektu.

Wartość zwracana

Wskaźnik do obiektu skojarzonego CCmdTarget z lpDispatch. Ta funkcja zwraca, NULL jeśli IDispatch obiekt nie jest rozpoznawany jako obiekt klasy IDispatch programu Microsoft Foundation.

Uwagi

Wynikiem tej funkcji jest odwrotność wywołania funkcji GetIDispatchskładowej .

CCmdTarget::GetDispatchIID

Pobiera podstawowy identyfikator interfejsu wysyłania.

virtual BOOL GetDispatchIID(IID* pIID);

Parametry

pIID
Wskaźnik do identyfikatora interfejsu (identyfikator GUID).

Wartość zwracana

TRUE jeśli operacja powiedzie się, w przeciwnym razie FALSE. W przypadku powodzenia *pIID parametr jest ustawiony na podstawowy identyfikator interfejsu wysyłania.

Uwagi

Klasy pochodne powinny zastąpić tę funkcję składową (jeśli nie zostanie zastąpiona, GetDispatchIID zwraca wartość FALSE). Zobacz: COleControl.

CCmdTarget::GetIDispatch

Wywołaj tę funkcję składową, aby pobrać IDispatch wskaźnik z metody automatyzacji, która zwraca IDispatch wskaźnik lub pobiera IDispatch wskaźnik przez odwołanie.

LPDISPATCH GetIDispatch(BOOL bAddRef);

Parametry

bAddRef
Określa, czy należy zwiększać liczbę odwołań dla obiektu.

Wartość zwracana

Wskaźnik IDispatch skojarzony z obiektem.

Uwagi

W przypadku obiektów wywołujących EnableAutomation w konstruktorach, dzięki czemu są włączone automatyzacja, ta funkcja zwraca wskaźnik do implementacji IDispatch klasy foundation używanej przez klientów komunikujących się za pośrednictwem interfejsu IDispatch . Wywołanie tej funkcji powoduje automatyczne dodanie odwołania do wskaźnika, więc nie jest konieczne wywołanie metody IUnknown::AddRef.

CCmdTarget::GetTypeInfoCount

Pobiera liczbę interfejsów informacyjnych typu zapewnianych przez obiekt.

virtual UINT GetTypeInfoCount();

Wartość zwracana

Liczba interfejsów informacyjnych typu.

Uwagi

Ta funkcja składowa w zasadzie implementuje IDispatch::GetTypeInfoCountelement .

Klasy pochodne powinny zastąpić tę funkcję, aby zwrócić liczbę udostępnionych interfejsów informacyjnych typu (0 lub 1). Jeśli nie zostanie zastąpiony, GetTypeInfoCount zwraca wartość 0. Aby zastąpić, użyj IMPLEMENT_OLETYPELIB makra, które również implementuje GetTypeLib i GetTypeLibCache.

CCmdTarget::GetTypeInfoOfGuid

Pobiera opis typu odpowiadający określonemu identyfikatorowi GUID.

HRESULT GetTypeInfoOfGuid(
    LCID lcid,
    const GUID& guid,
    LPTYPEINFO* ppTypeInfo);

Parametry

lcid
Identyfikator ustawień regionalnych ( LCID).

guid
Identyfikator GUID opisu typu.

ppTypeInfo
Wskaźnik do wskaźnika do interfejsu ITypeInfo .

Wartość zwracana

Element HRESULT wskazujący powodzenie lub niepowodzenie wywołania. W przypadku powodzenia *ppTypeInfo wskazuje interfejs informacyjny typu.

CCmdTarget::GetTypeLib

Pobiera wskaźnik do biblioteki typów.

virtual HRESULT GetTypeLib(
    LCID lcid,
    LPTYPELIB* ppTypeLib);

Parametry

lcid
Identyfikator ustawień regionalnych (LCID).

ppTypeLib
Wskaźnik do wskaźnika do interfejsu ITypeLib .

Wartość zwracana

Element HRESULT wskazujący powodzenie lub niepowodzenie wywołania. W przypadku powodzenia *ppTypeLib wskazuje interfejs biblioteki typów.

Uwagi

Klasy pochodne powinny zastąpić tę funkcję składową (jeśli nie zostanie zastąpiona, GetTypeLib zwraca wartość TYPE_E_CANTLOADLIBRARY). Użyj makra IMPLEMENT_OLETYPELIB , które również implementuje GetTypeInfoCount i GetTypeLibCache.

CCmdTarget::GetTypeLibCache

Pobiera pamięć podręczną biblioteki typów.

virtual CTypeLibCache* GetTypeLibCache();

Wartość zwracana

Wskaźnik do CTypeLibCache obiektu.

Uwagi

Klasy pochodne powinny zastąpić tę funkcję składową (jeśli nie zostanie zastąpiona, GetTypeLibCache zwraca wartość NULL). Użyj makra IMPLEMENT_OLETYPELIB , które również implementuje GetTypeInfoCount i GetTypeLib.

CCmdTarget::IsInvokeAllowed

Ta funkcja jest wywoływana przez implementację MFC w IDispatch::Invoke celu określenia, czy można wywołać daną metodę automatyzacji (zidentyfikowaną przez dispidmetodę ).

virtual BOOL IsInvokeAllowed(DISPID dispid);

Parametry

dispid
Identyfikator wysyłki.

Wartość zwracana

TRUE jeśli można wywołać metodę, w przeciwnym razie FALSE.

Uwagi

Jeśli funkcja zwraca wartość , Invoke przechodzi do wywołania metody . W IsInvokeAllowed przeciwnym razie Invoke metoda zakończy się niepowodzeniem, zwracając E_UNEXPECTEDpolecenie .TRUE

Klasy pochodne mogą zastąpić tę funkcję, aby zwrócić odpowiednie wartości (jeśli nie są zastępowane, IsInvokeAllowed zwraca wartość TRUE). Zobacz w szczególności COleControl::IsInvokeAllowed.

CCmdTarget::IsResultExpected

Użyj IsResultExpected polecenia , aby ustalić, czy klient oczekuje wartości zwracanej od wywołania funkcji automatyzacji.

BOOL IsResultExpected();

Wartość zwracana

Niezerowe, jeśli funkcja automatyzacji powinna zwrócić wartość; w przeciwnym razie 0.

Uwagi

Interfejs OLE dostarcza informacje do MFC o tym, czy klient używa, czy ignoruje wynik wywołania funkcji, a MFC z kolei używa tych informacji do określenia wyniku wywołania metody IsResultExpected. Jeśli produkcja wartości zwracanej jest czasochłonna lub intensywnie obciążająca zasoby, możesz zwiększyć wydajność, wywołując tę funkcję przed obliczenie wartości zwracanej.

Ta funkcja zwraca wartość 0 tylko raz, aby uzyskać prawidłowe wartości zwracane z innych funkcji automatyzacji, jeśli wywołasz je z funkcji automatyzacji, która została wywołana przez klienta.

IsResultExpected Zwraca wartość niezerową, jeśli jest wywoływana, gdy wywołanie funkcji automatyzacji nie jest w toku.

CCmdTarget::OnCmdMsg

Wywoływana przez platformę do kierowania i wysyłania komunikatów poleceń oraz obsługi aktualizacji obiektów interfejsu użytkownika poleceń.

virtual BOOL OnCmdMsg(
    UINT nID,
    int nCode,
    void* pExtra,
    AFX_CMDHANDLERINFO* pHandlerInfo);

Parametry

nID
Zawiera identyfikator polecenia.

nCode
Identyfikuje kod powiadomienia polecenia. Zobacz Uwagi , aby uzyskać więcej informacji na temat wartości dla elementu nCode.

pExtra
Używany zgodnie z wartością nCode. Zobacz uwagi , aby uzyskać więcej informacji o pExtra.

pHandlerInfo
Jeśli nie NULL, OnCmdMsg wypełnia pTarget strukturę i pmfpHandlerInfo zamiast wysyłać polecenie . Zazwyczaj ten parametr powinien mieć wartość NULL.

Wartość zwracana

Nonzero, jeśli komunikat jest obsługiwany; w przeciwnym razie 0.

Uwagi

Jest to główna rutyna implementacji architektury poleceń platformy.

W czasie OnCmdMsg wykonywania wysyła polecenie do innych obiektów lub obsługuje samo polecenie, wywołując klasę CCmdTarget::OnCmdMsggłówną , która wykonuje rzeczywiste wyszukiwanie mapy komunikatów. Pełny opis domyślnego routingu poleceń można znaleźć w temacie Obsługa komunikatów i Tematy mapowania.

W rzadkich przypadkach można zastąpić tę funkcję składową w celu rozszerzenia standardowego routingu poleceń platformy. Zapoznaj się z dokumentacją techniczną 21 , aby uzyskać szczegółowe informacje na temat architektury routingu poleceń.

Jeśli zastąpisz OnCmdMsgwartość , musisz podać odpowiednią wartość dla nCode, kod powiadomienia polecenia i pExtra, który zależy od wartości nCode. W poniższej tabeli wymieniono odpowiednie wartości:

nCode Wartość pExtra Wartość
CN_COMMAND CCmdUI*
CN_EVENT AFX_EVENT*
CN_UPDATE_COMMAND_UI CCmdUI*
CN_OLECOMMAND COleCmdUI*
CN_OLE_UNREGISTER NULL

Przykład

// This example illustrates extending the framework's standard command
// route from the view to objects managed by the view.  This example
// is from an object-oriented drawing application, similar to the
// DRAWCLI sample application, which draws and edits "shapes".
BOOL CMyView::OnCmdMsg(UINT nID,
                       int nCode,
                       void *pExtra,
                       AFX_CMDHANDLERINFO *pHandlerInfo)
{
   // Extend the framework's command route from the view to
   // the application-specific CMyShape that is currently selected
   // in the view. m_pActiveShape is NULL if no shape object
   // is currently selected in the view.
   if ((m_pActiveShape != NULL) &&
       m_pActiveShape->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
      return TRUE;

   // If the object(s) in the extended command route don't handle
   // the command, then let the base class OnCmdMsg handle it.
   return CView::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}

 

// The command handler for ID_SHAPE_COLOR (menu command to change
// the color of the currently selected shape) was added to the message
// map of CMyShape (note, not CMyView) using the Properties window.
// The menu item will be automatically enabled or disabled, depending
// on whether a CMyShape is currently selected in the view, that is,
// depending on whether CMyView::m_pActiveView is NULL.  It is not
// necessary to implement an ON_UPDATE_COMMAND_UI handler to enable
// or disable the menu item.
BEGIN_MESSAGE_MAP(CMyShape, CCmdTarget)
ON_COMMAND(ID_SHAPE_COLOR, &CMyShape::OnShapeColor)
END_MESSAGE_MAP()

CCmdTarget::OnFinalRelease

Wywoływana przez strukturę po wydaniu ostatniego odwołania OLE do lub z obiektu.

virtual void OnFinalRelease();

Uwagi

Zastąpi tę funkcję, aby zapewnić specjalną obsługę tej sytuacji. Domyślna implementacja usuwa obiekt.

CCmdTarget::RestoreWaitCursor

Wywołaj tę funkcję, aby przywrócić odpowiedni kursor klepsydry po zmianie kursora systemowego (na przykład po otwarciu pola komunikatu, a następnie zamknięciu w trakcie długiej operacji).

void RestoreWaitCursor();

Przykład

// The following example illustrates the most common case
// of displaying the hourglass cursor during some lengthy
// processing of a command handler implemented in some
// CCmdTarget-derived class, such as a document or view.
void CMyView::OnBeginSleepEnd()
{
   BeginWaitCursor(); // display the hourglass cursor
   // do some lengthy processing
   Sleep(3000);
   EndWaitCursor(); // remove the hourglass cursor
}

// The next example illustrates RestoreWaitCursor.
void CMyView::OnBeginDlgRestore()
{
   BeginWaitCursor(); // display the hourglass cursor
   // do some lengthy processing
   // The dialog box will normally change the cursor to
   // the standard arrow cursor, and leave the cursor in
   // as the standard arrow cursor when the dialog box is
   // closed.
   CFileDialog dlg(TRUE);
   dlg.DoModal();

   // It is necessary to call RestoreWaitCursor here in order
   // to change the cursor back to the hourglass cursor.
   RestoreWaitCursor();
   // do some more lengthy processing
   Sleep(3000);
   EndWaitCursor(); // remove the hourglass cursor
}

// In the above example, the dialog was clearly invoked between
// the pair of calls to BeginWaitCursor and EndWaitCursor.
// Sometimes it may not be clear whether the dialog is invoked
// in between a pair of calls to BeginWaitCursor and EndWaitCursor.
// It is permissible to call RestoreWaitCursor, even if
// BeginWaitCursor was not previously called.  This case is
// illustrated below, where CMyView::AnotherFunction does not
// need to know whether it was called in the context of an
// hourglass cursor.
void CMyView::OnDlgRestore()
{
   // some processing ...
   CFileDialog dlg(TRUE);
   dlg.DoModal();
   RestoreWaitCursor();

   // some more processing ...
}

// If the dialog is invoked from a member function of
// some non-CCmdTarget, then you can call CWinApp::DoWaitCursor
// with a 0 parameter value to restore the hourglass cursor.
void CMyObject::OnDlgDoWait()
{
   CFileDialog dlg(TRUE);
   dlg.DoModal();
   AfxGetApp()->DoWaitCursor(0); // same as CCmdTarget::RestoreWaitCursor
}

Zobacz też

Przykład MFC ACDUAL
CObject Klasa
Wykres hierarchii
CCmdUI Klasa
CDocument Klasa
CDocTemplate Klasa
CWinApp Klasa
CWnd Klasa
CView Klasa
CFrameWnd Klasa
COleDispatchDriver Klasa