CCmdTarget
-Klasse
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 CCmdTarget
abgeleiteten 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
Header: 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 CCmdTarget
abgeleiteten 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 ObjektlpDispatch
, das CCmdTarget
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::AddRef
tä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::GetTypeInfoCount
im 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 TRUE
wird, 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 IsResultExpected
bestimmen. 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 NULL
OnCmdMsg
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::OnCmdMsg
aufgerufen 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