CCmdTarget クラスCCmdTarget Class

Microsoft ファウンデーション クラス ライブラリのメッセージ マップ アーキテクチャの基本クラス。The base class for the Microsoft Foundation Class Library message-map architecture.

構文Syntax

class CCmdTarget : public CObject

メンバーMembers

パブリック コンストラクターPublic Constructors

名前Name 説明Description
CCmdターゲット::CCmdターゲットCCmdTarget::CCmdTarget CCmdTarget オブジェクトを構築します。Constructs a CCmdTarget object.

パブリック メソッドPublic Methods

名前Name 説明Description
を開始します。CCmdTarget::BeginWaitCursor カーソルを砂時計カーソルとして表示します。Displays the cursor as an hourglass cursor.
をクリック :Dします。CCmdTarget::DoOleVerb OLE 動詞によって指定されたアクションを実行します。Causes an action specified by an OLE verb to be performed.
CCmdターゲット::オートメーションを有効にするCCmdTarget::EnableAutomation オブジェクトの OLECCmdTargetオートメーションを許可します。Allows OLE automation for the CCmdTarget object.
接続を有効にします。CCmdTarget::EnableConnections コネクション ポイントを介したイベントの発生を有効にします。Enables event firing over connection points.
をクリックします。CCmdTarget::EnableTypeLib オブジェクトのタイプ ライブラリを有効にします。Enables an object's type library.
をクリックします。CCmdTarget::EndWaitCursor 前のカーソルに戻ります。Returns to the previous cursor.
をクリックします。CCmdTarget::EnumOleVerbs オブジェクトの OLE 動詞を列挙します。Enumerates an object's OLE verbs.
次のコマンドを使用します。CCmdTarget::FromIDispatch ポインターに関連付けられたCCmdTargetオブジェクトへのポインターをIDispatch返します。Returns a pointer to the CCmdTarget object associated with the IDispatch pointer.
をクリックします。CCmdTarget::GetDispatchIID プライマリ ディスパッチ インターフェイス ID を取得します。Gets the primary dispatch interface ID.
をクリックします。CCmdTarget::GetIDispatch オブジェクトに関連付けられたIDispatchオブジェクトへのポインターをCCmdTarget返します。Returns a pointer to the IDispatch object associated with the CCmdTarget object.
をクリックします。CCmdTarget::GetTypeInfoCount オブジェクトが提供する型情報インターフェイスの数を取得します。Retrieves the number of type information interfaces that an object provides.
を取得します。CCmdTarget::GetTypeInfoOfGuid 指定された GUID に対応するタイプ記述を取得します。Retrieves the type description that corresponds to the specified GUID.
をクリックします。CCmdTarget::GetTypeLib タイプ ライブラリへのポインターを取得します。Gets a pointer to a type library.
をクリックします。CCmdTarget::GetTypeLibCache タイプ ライブラリ キャッシュを取得します。Gets the type library cache.
を呼び出すことができます。CCmdTarget::IsInvokeAllowed オートメーション メソッドの呼び出しを有効にします。Enables automation method invocation.
期待される結果を示します。CCmdTarget::IsResultExpected オートメーション関数が値を返す必要がある場合は、0 以外を返します。Returns nonzero if an automation function should return a value.
をクリックします。CCmdTarget::OnCmdMsg コマンド メッセージをルーティングおよびディスパッチします。Routes and dispatches command messages.
CCmdターゲット::オンファイナルリリースCCmdTarget::OnFinalRelease 最後の OLE 参照が解放された後にクリーンアップします。Cleans up after the last OLE reference is released.
をクリックします。CCmdTarget::RestoreWaitCursor 砂時計カーソルを復元します。Restores the hourglass cursor.

解説Remarks

メッセージ マップは、コマンドまたはメッセージを処理するために記述したメンバー関数にルーティングします。A message map routes commands or messages to the member functions you write to handle them. (コマンドは、メニュー項目、コマンド ボタン、またはアクセラレータ キーからのメッセージです)。(A command is a message from a menu item, command button, or accelerator key.)

派生CCmdTargetする主要なフレームワーク クラスには、CView 、CWinApp、CDocument 、CWnd、およびCFrameWndが含まれます。 CDocumentKey framework classes derived from CCmdTarget include CView, CWinApp, CDocument, CWnd, and CFrameWnd. メッセージを処理する新しいクラスを作成する場合は、これらのCCmdTarget派生クラスの 1 つから派生します。If you intend for a new class to handle messages, derive the class from one of these CCmdTarget-derived classes. CCmdTargetクラスを直接派生させることはめったにありません。You will rarely derive a class from CCmdTarget directly.

コマンドOnCmdMsgターゲットとルーティングの概要については、「コマンド ターゲット」、「コマンドルーティング」、「メッセージのマッピング」を参照してください。For an overview of command targets and OnCmdMsg routing, see Command Targets, Command Routing, and Mapping Messages.

CCmdTargetには、砂時計カーソルの表示を処理するメンバー関数が含まれています。CCmdTarget includes member functions that handle the display of an hourglass cursor. コマンドが実行する時間間隔が顕著になると予想される場合は、砂時計カーソルを表示します。Display the hourglass cursor when you expect a command to take a noticeable time interval to execute.

メッセージ マップと同様に、ディスパッチ マップを使用してIDispatchOLE オートメーション機能を公開します。Dispatch maps, similar to message maps, are used to expose OLE automation IDispatch functionality. このインターフェイスを公開することにより、他のアプリケーション (Visual Basic など) がアプリケーションを呼び出すことができます。By exposing this interface, other applications (such as Visual Basic) can call into your application.

継承階層Inheritance Hierarchy

CObjectCObject

CCmdTarget

必要条件Requirements

ヘッダー: afxwin.hHeader: afxwin.h

を開始します。CCmdTarget::BeginWaitCursor

コマンドが実行する時間間隔が顕著になると予想される場合に、カーソルを砂時計として表示します。Call this function to display the cursor as an hourglass when you expect a command to take a noticeable time interval to execute.

void BeginWaitCursor();

解説Remarks

フレームワークは、オブジェクトが読み込みまたはファイルに自分自身を保存するときCDocumentなど、ビジー状態であることをユーザーに示すために、この関数を呼び出します。The framework calls this function to show the user that it is busy, such as when a CDocument object loads or saves itself to a file.

のアクションBeginWaitCursorは、処理などのOnSetCursor他のアクションがカーソルを変更する可能性があるため、単一のメッセージ ハンドラの外部では常に有効であるとは限りません。The actions of BeginWaitCursor are not always effective outside of a single message handler as other actions, such as OnSetCursor handling, could change the cursor.

EndWaitCursorのカーソルを復元するために呼び出します。Call EndWaitCursor to restore the previous cursor.

Example

// 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
}

CCmdターゲット::CCmdターゲットCCmdTarget::CCmdTarget

CCmdTarget オブジェクトを構築します。Constructs a CCmdTarget object.

CCmdTarget();

をクリック :Dします。CCmdTarget::DoOleVerb

OLE 動詞によって指定されたアクションを実行します。Causes an action specified by an OLE verb to be performed.

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

パラメーターParameters

i動詞iVerb
動詞の数値識別子。Numerical identifier of the verb.

をクリックします。lpMsg
動詞を呼び出したイベント (ダブルクリックなど) を記述するMSG構造体へのポインター。Pointer to the MSG structure describing the event (such as a double-click) that invoked the verb.

スーンドペアレントhWndParent
オブジェクトを保持しているドキュメント ウィンドウのハンドル。Handle of the document window containing the object.

LprectlpRect
hwndParentでオブジェクトの外接する四角形を定義する座標 (ピクセル単位) を含むRECT構造体へのポインター。Pointer to the RECT structure containing the coordinates, in pixels, that define an object's bounding rectangle in hwndParent.

戻り値Return Value

TRUE が成功した場合は FALSE、それ以外の場合は FALSE。TRUE if successful, otherwise FALSE.

解説Remarks

このメンバー関数は、基本的にIOleObject::DoVerbの実装です。This member function is basically an implementation of IOleObject::DoVerb. 可能なアクションは、CCmd ターゲット::列挙動詞によって列挙されます。The possible actions are enumerated by CCmdTarget::EnumOleVerbs.

CCmdターゲット::オートメーションを有効にするCCmdTarget::EnableAutomation

オブジェクトの OLE オートメーションを有効にします。Call this function to enable OLE automation for an object.

void EnableAutomation();

解説Remarks

この関数は、通常、オブジェクトのコンストラクターから呼び出され、クラスに対してディスパッチ マップが宣言されている場合にのみ呼び出されます。This function is typically called from the constructor of your object and should only be called if a dispatch map has been declared for the class. オートメーションの詳細については、「オートメーション クライアントとオートメーションサーバー」を参照してください。For more information on automation see the articles Automation Clients and Automation Servers.

接続を有効にします。CCmdTarget::EnableConnections

コネクション ポイントを介したイベントの発生を有効にします。Enables event firing over connection points.

void EnableConnections();

解説Remarks

コネクション ポイントを有効にするには、派生クラスのコンストラクターでこのメンバー関数を呼び出します。To enable connection points, call this member function in the constructor of your derived class.

をクリックします。CCmdTarget::EnableTypeLib

オブジェクトのタイプ ライブラリを有効にします。Enables an object's type library.

void EnableTypeLib();

解説Remarks

型情報を提供する場合は、派生CCmdTargetオブジェクトのコンストラクターでこのメンバー関数を呼び出します。Call this member function in the constructor of your CCmdTarget-derived object if it provides type information.

をクリックします。CCmdTarget::EndWaitCursor

砂時計カーソルから前のBeginWaitCursorカーソルに戻るメンバー関数を呼び出した後、この関数を呼び出します。Call this function after you have called the BeginWaitCursor member function to return from the hourglass cursor to the previous cursor.

void EndWaitCursor();

解説Remarks

フレームワークは、砂時計カーソルを呼び出した後もこのメンバー関数を呼び出します。The framework also calls this member function after it has called the hourglass cursor.

Example

// 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

オブジェクトの OLE 動詞を列挙します。Enumerates an object's OLE verbs.

BOOL EnumOleVerbs(LPENUMOLEVERB* ppenumOleVerb);

パラメーターParameters

をクリックします。ppenumOleVerb
インターフェイスへのポインターへのポインター。A pointer to a pointer to an IEnumOLEVERB interface.

戻り値Return Value

オブジェクトが少なくとも 1 つの OLE 動詞 (*この場合は ppenumOleVerbが列挙子インターフェイスを指す) をIEnumOLEVERBサポートしている場合は TRUE、それ以外の場合は FALSE。TRUE if the object supports at least one OLE verb (in which case * ppenumOleVerb points to an IEnumOLEVERB enumerator interface), otherwise FALSE.

解説Remarks

このメンバー関数は基本的にIOleObject::列挙動詞の実装ですThis member function is basically an implementation of IOleObject::EnumVerbs.

次のコマンドを使用します。CCmdTarget::FromIDispatch

クラスのオートメーション メンバー関数IDispatchから受け取ったポインターを、CCmdTarget``IDispatchオブジェクトのインターフェイスを実装するオブジェクトにマップします。Call this function to map an IDispatch pointer, received from automation member functions of a class, into the CCmdTarget object that implements the interfaces of the IDispatch object.

static CCmdTarget* PASCAL FromIDispatch(LPDISPATCH lpDispatch);

パラメーターParameters

を割り出すlpDispatch
IDispatch オブジェクトへのポインター。A pointer to an IDispatch object.

戻り値Return Value

lpDispatchCCmdTarget関連付けられているオブジェクトへのポインター。A pointer to the CCmdTarget object associated with lpDispatch. オブジェクトがIDispatchMicrosoft ファウンデーション クラスIDispatchオブジェクトとして認識されない場合、この関数は NULL を返します。This function returns NULL if the IDispatch object is not recognized as a Microsoft Foundation Class IDispatch object.

解説Remarks

この関数の結果は、メンバー関数 の呼び出しの逆GetIDispatchです。The result of this function is the inverse of a call to the member function GetIDispatch.

をクリックします。CCmdTarget::GetDispatchIID

プライマリ ディスパッチ インターフェイス ID を取得します。Gets the primary dispatch interface ID.

virtual BOOL GetDispatchIID(IID* pIID);

パラメーターParameters

pIIDpIID
インターフェイス ID (GUID へのポインタ。A pointer to an interface ID (a [GUID](/windows/win32/api/guiddef/ns-guiddef-guid.

戻り値Return Value

TRUE が成功した場合は FALSE、それ以外の場合は FALSE。TRUE if successful, otherwise FALSE. 成功した場合*、pIIDはプライマリ ディスパッチ インターフェイス ID に設定されます。If successful, * pIID is set to the primary dispatch interface ID.

解説Remarks

派生クラスは、このメンバー関数をオーバーライドする必要がありますGetDispatchIID(オーバーライドされていない場合は FALSE を返します)。Derived classes should override this member function (if not overridden, GetDispatchIID returns FALSE). 「コントロールコントロール」を参照してください。See COleControl.

をクリックします。CCmdTarget::GetIDispatch

ポインターを返すか、参照によってIDispatchポインターを受け取るオートメーション メソッドIDispatchからポインターをIDispatch取得します。Call this member function to retrieve the IDispatch pointer from an automation method that either returns an IDispatch pointer or takes an IDispatch pointer by reference.

LPDISPATCH GetIDispatch(BOOL bAddRef);

パラメーターParameters

参照を追加します。bAddRef
オブジェクトの参照カウントをインクリメントするかどうかを指定します。Specifies whether to increment the reference count for the object.

戻り値Return Value

オブジェクトIDispatchに関連付けられているポインター。The IDispatch pointer associated with the object.

解説Remarks

コンストラクターで呼びEnableAutomation出し、オートメーションを有効にするオブジェクトの場合、この関数は、インターフェイスを介して通信IDispatchするクライアントによって使用される Foundation クラスIDispatch実装へのポインターを返します。For objects that call EnableAutomation in their constructors, making them automation enabled, this function returns a pointer to the Foundation Class implementation of IDispatch that is used by clients who communicate via the IDispatch interface. この関数を呼び出すと、ポインターへの参照が自動的に追加されるため、呼び出しを行う必要はありませんCalling this function automatically adds a reference to the pointer, so it is not necessary to make a call to IUnknown::AddRef.

をクリックします。CCmdTarget::GetTypeInfoCount

オブジェクトが提供する型情報インターフェイスの数を取得します。Retrieves the number of type information interfaces that an object provides.

virtual UINT GetTypeInfoCount();

戻り値Return Value

型情報インターフェイスの数。The number of type information interfaces.

解説Remarks

このメンバー関数は基本的にIDispatch::GetTypeInfoCountを実装します。This member function basically implements IDispatch::GetTypeInfoCount.

派生クラスは、この関数をオーバーライドして、提供される型情報インターフェイスの数 (0 または 1) を返す必要があります。Derived classes should override this function to return the number of type information interfaces provided (either 0 or 1). オーバーライドされていない場合はGetTypeInfoCount0 を返します。If not overridden, GetTypeInfoCount returns 0. オーバーライドするには、IMPLEMENT_OLETYPELIBマクロGetTypeLibGetTypeLibCache使用します。To override, use the IMPLEMENT_OLETYPELIB macro, which also implements GetTypeLib and GetTypeLibCache.

を取得します。CCmdTarget::GetTypeInfoOfGuid

指定された GUID に対応するタイプ記述を取得します。Retrieves the type description that corresponds to the specified GUID.

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

パラメーターParameters

Lcidlcid
ロケール識別子 ( LCID)A locale identifier ( LCID).

guidguid
[GUID](/ウィンドウズ/win32/api/guiddef/ns-guid-guid型の説明。The [GUID](/windows/win32/api/guiddef/ns-guiddef-guid of the type description.

をクリックします。ppTypeInfo
ITypeInfoインターフェイスへのポインターへのポインター。Pointer to a pointer to the ITypeInfo interface.

戻り値Return Value

呼び出しの成功または失敗を示す HRESULT。An HRESULT indicating the success or failure of the call. 成功した場合*、ppTypeInfoは型情報インターフェイスを指します。If successful, * ppTypeInfo points to the type information interface.

をクリックします。CCmdTarget::GetTypeLib

タイプ ライブラリへのポインターを取得します。Gets a pointer to a type library.

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

パラメーターParameters

Lcidlcid
ロケール識別子 (LCID)。A locale identifier (LCID).

をクリックします。ppTypeLib
ITypeLibインターフェイスへのポインターへのポインター。A pointer to a pointer to the ITypeLib interface.

戻り値Return Value

呼び出しの成功または失敗を示す HRESULT。An HRESULT indicating the success or failure of the call. 正常に実行*された場合 、ppTypeLibはタイプ ライブラリ インターフェイスを指します。If successful, * ppTypeLib points to the type library interface.

解説Remarks

派生クラスは、このメンバー関数をオーバーライドする必要がありますGetTypeLib(オーバーライドされていない場合は、TYPE_E_CANTLOADLIBRARYを返します)。Derived classes should override this member function (if not overridden, GetTypeLib returns TYPE_E_CANTLOADLIBRARY). IMPLEMENT_OLETYPELIBマクロを使用GetTypeInfoCountしますGetTypeLibCacheUse the IMPLEMENT_OLETYPELIB macro, which also implements GetTypeInfoCount and GetTypeLibCache.

をクリックします。CCmdTarget::GetTypeLibCache

タイプ ライブラリ キャッシュを取得します。Gets the type library cache.

virtual CTypeLibCache* GetTypeLibCache();

戻り値Return Value

CTypeLibCache オブジェクトを指すポインターです。A pointer to a CTypeLibCache object.

解説Remarks

派生クラスは、このメンバー関数をオーバーライドする必要がありますGetTypeLibCache(オーバーライドされていない場合は NULL を返します)。Derived classes should override this member function (if not overridden, GetTypeLibCache returns NULL). IMPLEMENT_OLETYPELIBマクロを使用GetTypeInfoCountしますGetTypeLibUse the IMPLEMENT_OLETYPELIB macro, which also implements GetTypeInfoCount and GetTypeLib.

を呼び出すことができます。CCmdTarget::IsInvokeAllowed

この関数は、MFC のIDispatch::Invoke実装によって呼び出され、特定のオートメーション メソッド ( dispidで識別 ) を呼び出すことができるかどうかを判断します。This function is called by MFC's implementation of IDispatch::Invoke to determine if a given automation method (identified by dispid) can be invoked.

virtual BOOL IsInvokeAllowed(DISPID dispid);

パラメーターParameters

Dispiddispid
ディスパッチ ID。A dispatch ID.

戻り値Return Value

メソッドを呼び出すことができる場合は TRUE、それ以外の場合は FALSE。TRUE if the method can be invoked, otherwise FALSE.

解説Remarks

TRUEIsInvokeAllowedを返Invokeす場合は、メソッドの呼び出しに進みます。それ以外Invokeの場合は失敗し、E_UNEXPECTED返します。If IsInvokeAllowed returns TRUE, Invoke proceeds to call the method; otherwise, Invoke will fail, returning E_UNEXPECTED.

派生クラスは、この関数をオーバーライドして適切な値を返すことができますIsInvokeAllowed(オーバーライドされていない場合は TRUE を返します)。Derived classes can override this function to return appropriate values (if not overridden, IsInvokeAllowed returns TRUE). 特に、COleControl::IsInvokeAllowedを参照してください。See in particular COleControl::IsInvokeAllowed.

期待される結果を示します。CCmdTarget::IsResultExpected

クライアントIsResultExpectedがオートメーション関数の呼び出しから戻り値を期待しているかどうかを確認するために使用します。Use IsResultExpected to ascertain whether a client expects a return value from its call to an automation function.

BOOL IsResultExpected();

戻り値Return Value

オートメーション関数が値を返す必要がある場合は 0 以外の値を返します。それ以外の場合は 0。Nonzero if an automation function should return a value; otherwise 0.

解説Remarks

OLE インターフェイスは、クライアントが関数呼び出しの結果を使用しているか無視しているかに関する情報を MFC に提供し、MFC はこの情報を使用してIsResultExpected呼び出しの結果を判断します。The OLE interface supplies information to MFC about whether the client is using or ignoring the result of a function call, and MFC in turn uses this information to determine the result of a call to IsResultExpected. 戻り値の生成時間またはリソースを消費する場合は、戻り値を計算する前にこの関数を呼び出すことによって効率を高めることができます。If production of a return value is time- or resource-intensive, you can increase efficiency by calling this function before computing the return value.

この関数は、クライアントが呼び出したオートメーション関数から呼び出した場合に、他のオートメーション関数から有効な戻り値を取得するために、0 を 1 回だけ返します。This function returns 0 only once so that you will get valid return values from other automation functions if you call them from the automation function that the client has called.

IsResultExpectedオートメーション関数呼び出しが進行中でないときに呼び出された場合は、ゼロ以外の値を返します。IsResultExpected returns a nonzero value if called when an automation function call is not in progress.

をクリックします。CCmdTarget::OnCmdMsg

コマンド メッセージをルーティングおよびディスパッチし、コマンド ユーザー インターフェイス オブジェクトの更新を処理するために、フレームワークによって呼び出されます。Called by the framework to route and dispatch command messages and to handle the update of command user-interface objects.

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

パラメーターParameters

nIDnID
コマンド ID が含まれています。Contains the command ID.

nコードnCode
コマンド通知コードを識別します。Identifies the command notification code. nCodeの値の詳細については 、「解説」を参照してください。See Remarks for more information about values for nCode.

pエクストラpExtra
nCodeの値に従って使用されます。Used according to the value of nCode. pExtraの詳細については 、「解説」 を参照してください。See Remarks for more information about pExtra.

をクリックします。pHandlerInfo
NULL でない場合OnCmdMsgは、コマンドをディスパッチする代わりにpHandlerInfo構造体のpTargetおよびpmfメンバーを埋めます。If not NULL, OnCmdMsg fills in the pTarget and pmf members of the pHandlerInfo structure instead of dispatching the command. 通常、このパラメーターは NULL にする必要があります。Typically, this parameter should be NULL.

戻り値Return Value

メッセージが処理される場合は 0 以外。それ以外の場合は 0。Nonzero if the message is handled; otherwise 0.

解説Remarks

これはフレームワークコマンドアーキテクチャの主要な実装ルーチンです。This is the main implementation routine of the framework command architecture.

実行時に、コマンドOnCmdMsgを他のオブジェクトにディスパッチするか、実際のメッセージ マップ 検索を行CCmdTarget::OnCmdMsgう root クラス を呼び出してコマンド自体を処理します。At run time, OnCmdMsg dispatches a command to other objects or handles the command itself by calling the root class CCmdTarget::OnCmdMsg, which does the actual message-map lookup. デフォルトのコマンド・ルーティングの詳細については、メッセージ処理とマッピングのトピックを参照してくださいFor a complete description of the default command routing, see Message Handling and Mapping Topics.

まれに、このメンバー関数をオーバーライドして、フレームワークの標準コマンド ルーティングを拡張する必要があります。On rare occasions, you may want to override this member function to extend the framework's standard command routing. コマンド ルーティング アーキテクチャの詳細については、テクニカル ノート 21を参照してください。Refer to Technical Note 21 for advanced details of the command-routing architecture.

OnCmdMsgオーバーライドする場合は 、nCodeの値に応じて nCode 、コマンド通知コード、およびpExtraに適切な値を指定する必要があります。If you override OnCmdMsg, you must supply the appropriate value for nCode, the command notification code, and pExtra, which depends on the value of nCode. 次の表に、対応する値を示します。The following table lists their corresponding values:

nコードnCode value p エクストラpExtra value
CN_COMMANDCN_COMMAND Ccmdui*CCmdUI*
CN_EVENTCN_EVENT AFX_EVENT*AFX_EVENT*
CN_UPDATE_COMMAND_UICN_UPDATE_COMMAND_UI CCmdUI*CCmdUI*
CN_OLECOMMANDCN_OLECOMMAND Colecmdui*COleCmdUI*
CN_OLE_UNREGISTERCN_OLE_UNREGISTER NULLNULL

Example

// 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()

CCmdターゲット::オンファイナルリリースCCmdTarget::OnFinalRelease

オブジェクトへの最後の OLE 参照またはオブジェクトからの OLE 参照が解放されたときに、フレームワークによって呼び出されます。Called by the framework when the last OLE reference to or from the object is released.

virtual void OnFinalRelease();

解説Remarks

この状況に対する特別な処理を提供するには、この関数をオーバーライドします。Override this function to provide special handling for this situation. 既定の実装では、オブジェクトを削除します。The default implementation deletes the object.

をクリックします。CCmdTarget::RestoreWaitCursor

システム カーソルが変更された後 (たとえば、メッセージ ボックスが開いて閉じた後に、長い操作の途中で) 適切な砂時計カーソルを復元します。Call this function to restore the appropriate hourglass cursor after the system cursor has changed (for example, after a message box has opened and then closed while in the middle of a lengthy operation).

void RestoreWaitCursor();

Example

// 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
}

関連項目See also

MFC サンプル ACDUALMFC Sample ACDUAL
CオブジェクトクラスCObject Class
階層グラフHierarchy Chart
CCmdUI クラスCCmdUI Class
CDocument クラスCDocument Class
クラスCDocTemplate Class
CWinApp クラスCWinApp Class
CWnd クラスCWnd Class
CビュークラスCView Class
CFrameWnd クラスCFrameWnd Class
クラスをディスパッチします。COleDispatchDriver Class