CCmdTarget
-Klasse
Die Basisklasse für die Nachrichtenzuordnungsarchitektur der Microsoft Foundation Class Library.
class CCmdTarget : public CObject
Name | Beschreibung |
---|---|
CCmdTarget::CCmdTarget |
Erstellt ein CCmdTarget -Objekt. |
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. |
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.
CCmdTarget
Header: afxwin.h
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();
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.
// 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
}
Erstellt ein CCmdTarget
-Objekt.
CCmdTarget();
Bewirkt, dass eine durch ein OLE-Verb angegebene Aktion ausgeführt wird.
BOOL DoOleVerb(
LONG iVerb,
LPMSG lpMsg,
HWND hWndParent,
LPCRECT lpRect);
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
TRUE
wenn dies erfolgreich ist, andernfalls FALSE
.
Diese Memberfunktion ist im Grunde eine Implementierung von IOleObject::DoVerb
. Die möglichen Aktionen werden aufgezählt.CCmdTarget::EnumOleVerbs
Rufen Sie diese Funktion auf, um die OLE-Automatisierung für ein Objekt zu aktivieren.
void EnableAutomation();
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.
Ermöglicht das Auslösen von Ereignissen über Verbindungspunkte.
void EnableConnections();
Rufen Sie diese Memberfunktion im Konstruktor der abgeleiteten Klasse auf, um Verbindungspunkte zu aktivieren.
Aktiviert die Typbibliothek eines Objekts.
void EnableTypeLib();
Rufen Sie diese Memberfunktion im Konstruktor des CCmdTarget
abgeleiteten Objekts auf, wenn sie Typinformationen bereitstellt.
Rufen Sie diese Funktion auf, nachdem Sie die BeginWaitCursor
Memberfunktion aufgerufen haben, um vom Sanduhrcursor zum vorherigen Cursor zurückzukehren.
void EndWaitCursor();
Das Framework ruft diese Memberfunktion auch auf, nachdem sie den Sanduhrcursor aufgerufen hat.
// 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
}
Listet die OLE-Verben eines Objekts auf.
BOOL EnumOleVerbs(LPENUMOLEVERB* ppenumOleVerb);
ppenumOleVerb
Ein Zeiger auf einen Zeiger auf eine IEnumOLEVERB
Schnittstelle.
TRUE
wenn das Objekt mindestens ein OLE-Verb unterstützt (in diesem Fall *ppenumOleVerb
verweist auf eine IEnumOLEVERB
Enumerationsschnittstelle), andernfalls FALSE
.
Diese Memberfunktion ist im Grunde eine Implementierung von IOleObject::EnumVerbs
.
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);
lpDispatch
Ein Zeiger auf ein IDispatch
-Objekt.
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.
Das Ergebnis dieser Funktion ist die Umkehrung eines Aufrufs der Memberfunktion GetIDispatch
.
Ruft die primäre Dispatch-Schnittstellen-ID ab.
virtual BOOL GetDispatchIID(IID* pIID);
pIID
Ein Zeiger auf eine Schnittstellen-ID (eine GUID).
TRUE
wenn dies erfolgreich ist, andernfalls FALSE
. Wenn dies erfolgreich ist, *pIID
wird sie auf die ID der primären Verteilerschnittstelle festgelegt.
Abgeleitete Klassen sollten diese Memberfunktion überschreiben (wenn sie nicht überschrieben werden, GetDispatchIID
gibt zurück FALSE
). Siehe COleControl
.
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);
bAddRef
Gibt an, ob die Referenzanzahl für das Objekt erhöht werden soll.
Der IDispatch
dem Objekt zugeordnete Zeiger.
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.
Ruft die Anzahl der Typinformationsschnittstellen ab, die ein Objekt bereitstellt.
virtual UINT GetTypeInfoCount();
Die Anzahl der Typinformationsschnittstellen.
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
.
Ruft die Typbeschreibung ab, die der angegebenen GUID entspricht.
HRESULT GetTypeInfoOfGuid(
LCID lcid,
const GUID& guid,
LPTYPEINFO* ppTypeInfo);
lcid
Ein Gebietsschemabezeichner ( LCID
).
guid
Die GUID der Typbeschreibung.
ppTypeInfo
Zeigen Sie auf einen Zeiger auf die ITypeInfo
Schnittstelle.
Ein HRESULT
Hinweis auf den Erfolg oder Fehler des Anrufs. Zeigt bei erfolgreicher Ausführung *ppTypeInfo
auf die Typinformationsschnittstelle.
Ruft einen Zeiger auf eine Typbibliothek ab.
virtual HRESULT GetTypeLib(
LCID lcid,
LPTYPELIB* ppTypeLib);
lcid
Ein Gebietsschemabezeichner (LCID).
ppTypeLib
Ein Zeiger auf einen Zeiger auf die ITypeLib
Schnittstelle.
Ein HRESULT
Hinweis auf den Erfolg oder Fehler des Anrufs. Zeigt bei erfolgreicher Ausführung *ppTypeLib
auf die Typbibliotheksschnittstelle.
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
.
Ruft den Typbibliothekscache ab.
virtual CTypeLibCache* GetTypeLibCache();
Ein Zeiger auf ein CTypeLibCache
-Objekt.
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
.
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);
dispid
Eine Verteiler-ID.
TRUE
wenn die Methode aufgerufen werden kann, andernfalls FALSE
.
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
.
Hier erfahren Sie IsResultExpected
, ob ein Client einen Rückgabewert von seinem Aufruf an eine Automatisierungsfunktion erwartet.
BOOL IsResultExpected();
Nonzero, wenn eine Automatisierungsfunktion einen Wert zurückgeben soll; andernfalls 0.
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.
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);
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
.
Nonzero, wenn die Nachricht behandelt wird; andernfalls 0.
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 |
// 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()
Wird vom Framework aufgerufen, wenn der letzte OLE-Verweis auf oder vom Objekt freigegeben wird.
virtual void OnFinalRelease();
Überschreiben Sie diese Funktion, um eine spezielle Behandlung für diese Situation bereitzustellen. Die Standardimplementierung löscht das Objekt.
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();
// 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
}
MFC-Beispiel ACDUAL
CObject
Klasse
Hierarchiediagramm
CCmdUI
Klasse
CDocument
Klasse
CDocTemplate
Klasse
CWinApp
Klasse
CWnd
Klasse
CView
Klasse
CFrameWnd
Klasse
COleDispatchDriver
Klasse