Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Basisklasse für die Nachrichtenzuordnungsarchitektur der Microsoft Foundation Class Library.
Syntax
class CCmdTarget : public CObject
Member
Öffentliche Konstruktoren
| Name | Beschreibung |
|---|---|
CCmdTarget::CCmdTarget |
Erstellt ein CCmdTarget-Objekt. |
Öffentliche Methoden
| Name | Beschreibung |
|---|---|
CCmdTarget::BeginWaitCursor |
Zeigt den Cursor als Sanduhrcursor an. |
CCmdTarget::DoOleVerb |
Bewirkt, dass eine durch ein OLE-Verb angegebene Aktion ausgeführt wird. |
CCmdTarget::EnableAutomation |
Ermöglicht die OLE-Automatisierung für das CCmdTarget Objekt. |
CCmdTarget::EnableConnections |
Ermöglicht das Auslösen von Ereignissen über Verbindungspunkte. |
CCmdTarget::EnableTypeLib |
Aktiviert die Typbibliothek eines Objekts. |
CCmdTarget::EndWaitCursor |
Kehrt zum vorherigen Cursor zurück. |
CCmdTarget::EnumOleVerbs |
Listet die OLE-Verben eines Objekts auf. |
CCmdTarget::FromIDispatch |
Gibt einen Zeiger auf das Objekt zurück, das CCmdTarget dem IDispatch Zeiger zugeordnet ist. |
CCmdTarget::GetDispatchIID |
Ruft die primäre Dispatch-Schnittstellen-ID ab. |
CCmdTarget::GetIDispatch |
Gibt einen Zeiger auf das Objekt zurück, das IDispatch dem CCmdTarget Objekt zugeordnet ist. |
CCmdTarget::GetTypeInfoCount |
Ruft die Anzahl der Typinformationsschnittstellen ab, die ein Objekt bereitstellt. |
CCmdTarget::GetTypeInfoOfGuid |
Ruft die Typbeschreibung ab, die der angegebenen GUID entspricht. |
CCmdTarget::GetTypeLib |
Ruft einen Zeiger auf eine Typbibliothek ab. |
CCmdTarget::GetTypeLibCache |
Ruft den Typbibliothekscache ab. |
CCmdTarget::IsInvokeAllowed |
Aktiviert den Aufruf der Automatisierungsmethode. |
CCmdTarget::IsResultExpected |
Gibt nonzero zurück, wenn eine Automatisierungsfunktion einen Wert zurückgeben soll. |
CCmdTarget::OnCmdMsg |
Leitet Befehlsmeldungen weiter und verteilt sie. |
CCmdTarget::OnFinalRelease |
Bereinigt nach der Veröffentlichung des letzten OLE-Verweises. |
CCmdTarget::RestoreWaitCursor |
Stellt den Sanduhrcursor wieder her. |
Hinweise
Eine Nachrichtenzuordnung leitet Befehle oder Nachrichten an die Memberfunktionen weiter, die Sie schreiben, um sie zu behandeln. (Ein Befehl ist eine Nachricht aus einem Menüelement, einer Befehlsschaltfläche oder einer Tastenkombination.)
Schlüsselframeworkklassen, die von CCmdTarget include CView, CWinApp, , CDocument, CWnd, und CFrameWnd. Wenn Sie beabsichtigen, dass eine neue Klasse Nachrichten verarbeitet, leiten Sie die Klasse von einer dieser CCmdTargetabgeleiteten Klassen ab. Sie leiten einen Kurs selten direkt ab CCmdTarget .
Eine Übersicht über Befehlsziele und OnCmdMsg Routing finden Sie unter "Befehlsziele", "Befehlsrouting" und "Zuordnen von Nachrichten".
CCmdTarget enthält Memberfunktionen, die die Anzeige eines Sanduhrcursors behandeln. Zeigen Sie den Sanduhrcursor an, wenn sie erwarten, dass ein Befehl ein spürbares Zeitintervall für die Ausführung benötigt.
Verteilerzuordnungen, ähnlich wie Nachrichtenzuordnungen, werden verwendet, um OLE-Automatisierungsfunktionen IDispatch verfügbar zu machen. Durch die Bereitstellung dieser Schnittstelle können andere Anwendungen (z. B. Visual Basic) Ihre Anwendung aufrufen.
Vererbungshierarchie
CCmdTarget
Anforderungen
Kopfball:afxwin.h
CCmdTarget::BeginWaitCursor
Rufen Sie diese Funktion auf, um den Cursor als Sanduhr anzuzeigen, wenn sie erwarten, dass ein Befehl ein spürbares Zeitintervall für die Ausführung benötigt.
void BeginWaitCursor();
Hinweise
Das Framework ruft diese Funktion auf, um dem Benutzer anzuzeigen, dass es ausgelastet ist, z. B. wenn ein CDocument Objekt geladen oder in einer Datei gespeichert wird.
Die Aktionen, die BeginWaitCursor außerhalb eines einzelnen Nachrichtenhandlers nicht immer wirksam sind, als andere Aktionen, z OnSetCursor . B. die Behandlung, könnten den Cursor ändern.
Aufrufen EndWaitCursor zum Wiederherstellen des vorherigen Cursors.
Beispiel
// 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
Erstellt ein CCmdTarget-Objekt.
CCmdTarget();
CCmdTarget::DoOleVerb
Bewirkt, dass eine durch ein OLE-Verb angegebene Aktion ausgeführt wird.
BOOL DoOleVerb(
LONG iVerb,
LPMSG lpMsg,
HWND hWndParent,
LPCRECT lpRect);
Parameter
iVerb
Numerischer Bezeichner des Verbs.
lpMsg
Zeigen Sie auf die Struktur, die MSG das Ereignis beschreibt (z. B. einen Doppelklick), der das Verb aufgerufen hat.
hWndParent
Das Handle des Dokumentfensters, das das Objekt enthält.
lpRect
Zeigen Sie auf die Struktur, die RECT die Koordinaten in Pixeln enthält, die das umgebende Rechteck eines Objekts definieren.hWndParent
Rückgabewert
TRUE wenn dies erfolgreich ist, andernfalls FALSE.
Hinweise
Diese Memberfunktion ist im Grunde eine Implementierung von IOleObject::DoVerb. Die möglichen Aktionen werden aufgezählt.CCmdTarget::EnumOleVerbs
CCmdTarget::EnableAutomation
Rufen Sie diese Funktion auf, um die OLE-Automatisierung für ein Objekt zu aktivieren.
void EnableAutomation();
Hinweise
Diese Funktion wird in der Regel vom Konstruktor Ihres Objekts aufgerufen und sollte nur aufgerufen werden, wenn eine Verteilerzuordnung für die Klasse deklariert wurde. Weitere Informationen zur Automatisierung finden Sie in den Artikeln Automatisierungsclients und Automatisierungsserver.
CCmdTarget::EnableConnections
Ermöglicht das Auslösen von Ereignissen über Verbindungspunkte.
void EnableConnections();
Hinweise
Rufen Sie diese Memberfunktion im Konstruktor der abgeleiteten Klasse auf, um Verbindungspunkte zu aktivieren.
CCmdTarget::EnableTypeLib
Aktiviert die Typbibliothek eines Objekts.
void EnableTypeLib();
Hinweise
Rufen Sie diese Memberfunktion im Konstruktor des CCmdTargetabgeleiteten Objekts auf, wenn sie Typinformationen bereitstellt.
CCmdTarget::EndWaitCursor
Rufen Sie diese Funktion auf, nachdem Sie die BeginWaitCursor Memberfunktion aufgerufen haben, um vom Sanduhrcursor zum vorherigen Cursor zurückzukehren.
void EndWaitCursor();
Hinweise
Das Framework ruft diese Memberfunktion auch auf, nachdem sie den Sanduhrcursor aufgerufen hat.
Beispiel
// 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
Listet die OLE-Verben eines Objekts auf.
BOOL EnumOleVerbs(LPENUMOLEVERB* ppenumOleVerb);
Parameter
ppenumOleVerb
Ein Zeiger auf einen Zeiger auf eine IEnumOLEVERB Schnittstelle.
Rückgabewert
TRUE wenn das Objekt mindestens ein OLE-Verb unterstützt (in diesem Fall *ppenumOleVerb verweist auf eine IEnumOLEVERB Enumerationsschnittstelle), andernfalls FALSE.
Hinweise
Diese Memberfunktion ist im Grunde eine Implementierung von IOleObject::EnumVerbs.
CCmdTarget::FromIDispatch
Rufen Sie diese Funktion auf, um einen IDispatch Zeiger zuzuordnen, der von Automatisierungselementfunktionen einer Klasse empfangen wird, in das CCmdTarget Objekt, das die Schnittstellen des IDispatch Objekts implementiert.
static CCmdTarget* PASCAL FromIDispatch(LPDISPATCH lpDispatch);
Parameter
lpDispatch
Ein Zeiger auf ein IDispatch -Objekt.
Rückgabewert
Ein Zeiger auf das ObjektCCmdTarget, das lpDispatch zugeordnet ist. Diese Funktion gibt zurück NULL , wenn das IDispatch Objekt nicht als Microsoft Foundation Class-Objekt IDispatch erkannt wird.
Hinweise
Das Ergebnis dieser Funktion ist die Umkehrung eines Aufrufs der Memberfunktion GetIDispatch.
CCmdTarget::GetDispatchIID
Ruft die primäre Dispatch-Schnittstellen-ID ab.
virtual BOOL GetDispatchIID(IID* pIID);
Parameter
pIID
Ein Zeiger auf eine Schnittstellen-ID (eine GUID).
Rückgabewert
TRUE wenn dies erfolgreich ist, andernfalls FALSE. Wenn dies erfolgreich ist, *pIID wird sie auf die ID der primären Verteilerschnittstelle festgelegt.
Hinweise
Abgeleitete Klassen sollten diese Memberfunktion überschreiben (wenn sie nicht überschrieben werden, GetDispatchIID gibt zurück FALSE). Siehe COleControl.
CCmdTarget::GetIDispatch
Rufen Sie diese Memberfunktion auf, um den Zeiger aus einer Automatisierungsmethode abzurufen, die IDispatch entweder einen IDispatch Zeiger zurückgibt oder einen IDispatch Zeiger nach Verweis verwendet.
LPDISPATCH GetIDispatch(BOOL bAddRef);
Parameter
bAddRef
Gibt an, ob die Referenzanzahl für das Objekt erhöht werden soll.
Rückgabewert
Der IDispatch dem Objekt zugeordnete Zeiger.
Hinweise
Bei Objekten, die in ihren Konstruktoren aufrufen EnableAutomation , wodurch sie automatisierungsfähig werden, gibt diese Funktion einen Zeiger auf die Foundation Class-Implementierung zurück, die IDispatch von Clients verwendet wird, die über die IDispatch Schnittstelle kommunizieren. Durch aufrufen dieser Funktion wird automatisch ein Verweis auf den Zeiger hinzugefügt, daher ist es nicht erforderlich, einen Aufruf zu IUnknown::AddReftätigen.
CCmdTarget::GetTypeInfoCount
Ruft die Anzahl der Typinformationsschnittstellen ab, die ein Objekt bereitstellt.
virtual UINT GetTypeInfoCount();
Rückgabewert
Die Anzahl der Typinformationsschnittstellen.
Hinweise
Diese Memberfunktion implementiert IDispatch::GetTypeInfoCountim Wesentlichen .
Abgeleitete Klassen sollten diese Funktion überschreiben, um die Anzahl der bereitgestellten Typinformationsschnittstellen (entweder 0 oder 1) zurückzugeben. Wenn sie nicht außer Kraft gesetzt wird, GetTypeInfoCount wird 0 zurückgegeben. Verwenden Sie zum Überschreiben das IMPLEMENT_OLETYPELIB Makro, das ebenfalls implementiert und implementiert GetTypeLib wird GetTypeLibCache.
CCmdTarget::GetTypeInfoOfGuid
Ruft die Typbeschreibung ab, die der angegebenen GUID entspricht.
HRESULT GetTypeInfoOfGuid(
LCID lcid,
const GUID& guid,
LPTYPEINFO* ppTypeInfo);
Parameter
lcid
Ein Gebietsschemabezeichner (LCID).
guid
Die GUID der Typbeschreibung.
ppTypeInfo
Zeigen Sie auf einen Zeiger auf die ITypeInfo Schnittstelle.
Rückgabewert
Ein HRESULT Hinweis auf den Erfolg oder Fehler des Anrufs. Zeigt bei erfolgreicher Ausführung *ppTypeInfo auf die Typinformationsschnittstelle.
CCmdTarget::GetTypeLib
Ruft einen Zeiger auf eine Typbibliothek ab.
virtual HRESULT GetTypeLib(
LCID lcid,
LPTYPELIB* ppTypeLib);
Parameter
lcid
Ein Gebietsschemabezeichner (LCID).
ppTypeLib
Ein Zeiger auf einen Zeiger auf die ITypeLib Schnittstelle.
Rückgabewert
Ein HRESULT Hinweis auf den Erfolg oder Fehler des Anrufs. Zeigt bei erfolgreicher Ausführung *ppTypeLib auf die Typbibliotheksschnittstelle.
Hinweise
Abgeleitete Klassen sollten diese Memberfunktion überschreiben (wenn sie nicht überschrieben werden, GetTypeLib gibt zurück TYPE_E_CANTLOADLIBRARY). Verwenden Sie das IMPLEMENT_OLETYPELIB Makro, das auch implementiert GetTypeInfoCount und implementiert wird GetTypeLibCache.
CCmdTarget::GetTypeLibCache
Ruft den Typbibliothekscache ab.
virtual CTypeLibCache* GetTypeLibCache();
Rückgabewert
Ein Zeiger auf ein CTypeLibCache-Objekt.
Hinweise
Abgeleitete Klassen sollten diese Memberfunktion überschreiben (wenn sie nicht überschrieben werden, GetTypeLibCache gibt zurück NULL). Verwenden Sie das IMPLEMENT_OLETYPELIB Makro, das auch implementiert GetTypeInfoCount und implementiert wird GetTypeLib.
CCmdTarget::IsInvokeAllowed
Diese Funktion wird von der Implementierung von IDispatch::Invoke MFC aufgerufen, um festzustellen, ob eine bestimmte Automatisierungsmethode (identifiziert durch dispid) aufgerufen werden kann.
virtual BOOL IsInvokeAllowed(DISPID dispid);
Parameter
dispid
Eine Verteiler-ID.
Rückgabewert
TRUE wenn die Methode aufgerufen werden kann, andernfalls FALSE.
Hinweise
Wenn IsInvokeAllowed zurückgegeben TRUEwird, Invoke wird die Methode aufgerufen. Andernfalls Invoke schlägt die Rückgabe fehl E_UNEXPECTED.
Abgeleitete Klassen können diese Funktion außer Kraft setzen, um geeignete Werte zurückzugeben (wenn sie nicht überschrieben werden, IsInvokeAllowed gibt diese Funktion zurück TRUE). Siehe insbesondere COleControl::IsInvokeAllowed.
CCmdTarget::IsResultExpected
Hier erfahren Sie IsResultExpected , ob ein Client einen Rückgabewert von seinem Aufruf an eine Automatisierungsfunktion erwartet.
BOOL IsResultExpected();
Rückgabewert
Nonzero, wenn eine Automatisierungsfunktion einen Wert zurückgeben soll; andernfalls 0.
Hinweise
Die OLE-Schnittstelle stellt MFC Informationen darüber bereit, ob der Client das Ergebnis eines Funktionsaufrufs verwendet oder ignoriert, und MFC verwendet wiederum diese Informationen, um das Ergebnis eines Aufrufs zu IsResultExpectedbestimmen. Wenn die Produktion eines Rückgabewerts zeit- oder ressourcenintensiv ist, können Sie die Effizienz erhöhen, indem Sie diese Funktion aufrufen, bevor Sie den Rückgabewert berechnen.
Diese Funktion gibt 0 nur einmal zurück, sodass Sie gültige Rückgabewerte aus anderen Automatisierungsfunktionen erhalten, wenn Sie sie von der Automatisierungsfunktion aufrufen, die der Client aufgerufen hat.
IsResultExpected gibt einen Wert ungleich Null zurück, wenn ein Aufruf einer Automatisierungsfunktion nicht ausgeführt wird.
CCmdTarget::OnCmdMsg
Wird vom Framework aufgerufen, um Befehlsmeldungen weiterzuleiten und zu verteilen und die Aktualisierung von Befehlsbenutzeroberflächenobjekten zu verarbeiten.
virtual BOOL OnCmdMsg(
UINT nID,
int nCode,
void* pExtra,
AFX_CMDHANDLERINFO* pHandlerInfo);
Parameter
nID
Enthält die Befehls-ID.
nCode
Identifiziert den Befehlsbenachrichtigungscode. Weitere Informationen zu Werten finden Sie in den Hinweisen für nCode.
pExtra
Wird gemäß dem Wert von nCode.
Weitere Informationen zu pExtra.
pHandlerInfo
Andernfalls NULLOnCmdMsg füllt er die pTarget Struktur und pmf die Member der pHandlerInfo Struktur aus, anstatt den Befehl zu verteilen. In der Regel sollte dieser Parameter sein NULL.
Rückgabewert
Nonzero, wenn die Nachricht behandelt wird; andernfalls 0.
Hinweise
Dies ist die Hauptimplementierungsroutine der Framework-Befehlsarchitektur.
Zur Laufzeit OnCmdMsg wird ein Befehl an andere Objekte verteilt oder der Befehl selbst behandelt, indem die Stammklasse CCmdTarget::OnCmdMsgaufgerufen wird, die die eigentliche Nachrichtenzuordnungssuche durchführt. Eine vollständige Beschreibung des Standardbefehlsrouting finden Sie unter "Nachrichtenbehandlung" und "Zuordnungsthemen".
In seltenen Fällen sollten Sie diese Memberfunktion außer Kraft setzen, um das Standardmäßige Befehlsrouting des Frameworks zu erweitern. Weitere Informationen zur Befehlsroutingarchitektur finden Sie in technischem Hinweis 21 .
Wenn Sie außer Kraft setzen OnCmdMsg, müssen Sie den entsprechenden Wert für nCode, den Befehlsbenachrichtigungscode und pExtra, die vom Wert von nCode. In der folgenden Tabelle sind die entsprechenden Werte aufgeführt:
Wert vom Typ nCode |
Wert vom Typ pExtra |
|---|---|
CN_COMMAND |
CCmdUI* |
CN_EVENT |
AFX_EVENT* |
CN_UPDATE_COMMAND_UI |
CCmdUI* |
CN_OLECOMMAND |
COleCmdUI* |
CN_OLE_UNREGISTER |
NULL |
Beispiel
// 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
Wird vom Framework aufgerufen, wenn der letzte OLE-Verweis auf oder vom Objekt freigegeben wird.
virtual void OnFinalRelease();
Hinweise
Überschreiben Sie diese Funktion, um eine spezielle Behandlung für diese Situation bereitzustellen. Die Standardimplementierung löscht das Objekt.
CCmdTarget::RestoreWaitCursor
Rufen Sie diese Funktion auf, um den entsprechenden Sanduhrcursor wiederherzustellen, nachdem sich der Systemcursor geändert hat (z. B. nachdem ein Meldungsfeld geöffnet und dann während eines langen Vorgangs geschlossen wurde).
void RestoreWaitCursor();
Beispiel
// 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
}
Siehe auch
MFC-Beispiel ACDUAL
CObject Klasse
Hierarchiediagramm
CCmdUI Klasse
CDocument Klasse
CDocTemplate Klasse
CWinApp Klasse
CWnd Klasse
CView Klasse
CFrameWnd Klasse
COleDispatchDriver Klasse