CCmdTarget クラスCCmdTarget Class

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

構文Syntax

class CCmdTarget : public CObject

メンバーMembers

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

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

パブリック メソッドPublic Methods

名前Name 説明Description
CCmdTarget:: BeginWaitCursorCCmdTarget::BeginWaitCursor カーソルを砂時計カーソルとして表示します。Displays the cursor as an hourglass cursor.
CCmdTarget::D oOleVerbCCmdTarget::DoOleVerb OLE 動詞によって指定されたアクションを実行します。Causes an action specified by an OLE verb to be performed.
CCmdTarget:: EnableAutomationCCmdTarget::EnableAutomation オブジェクトの OLE オートメーションを許可 CCmdTarget します。Allows OLE automation for the CCmdTarget object.
CCmdTarget:: EnableConnectionsCCmdTarget::EnableConnections コネクションポイントでのイベントの発生を有効にします。Enables event firing over connection points.
CCmdTarget:: EnableTypeLibCCmdTarget::EnableTypeLib オブジェクトのタイプライブラリを有効にします。Enables an object's type library.
CCmdTarget:: EndWaitCursorCCmdTarget::EndWaitCursor 前のカーソルに戻ります。Returns to the previous cursor.
CCmdTarget:: EnumOleVerbsCCmdTarget::EnumOleVerbs オブジェクトの OLE 動詞を列挙します。Enumerates an object's OLE verbs.
CCmdTarget:: FromIDispatchCCmdTarget::FromIDispatch CCmdTargetポインターに関連付けられているオブジェクトへのポインターを返し IDispatch ます。Returns a pointer to the CCmdTarget object associated with the IDispatch pointer.
CCmdTarget:: GetDispatchIIDCCmdTarget::GetDispatchIID プライマリディスパッチインターフェイス ID を取得します。Gets the primary dispatch interface ID.
CCmdTarget:: GetIDispatchCCmdTarget::GetIDispatch IDispatchオブジェクトに関連付けられているオブジェクトへのポインターを返し CCmdTarget ます。Returns a pointer to the IDispatch object associated with the CCmdTarget object.
CCmdTarget:: GetTypeInfoCountCCmdTarget::GetTypeInfoCount オブジェクトが提供する型情報インターフェイスの数を取得します。Retrieves the number of type information interfaces that an object provides.
CCmdTarget:: GetTypeInfoOfGuidCCmdTarget::GetTypeInfoOfGuid 指定された GUID に対応するタイプ記述を取得します。Retrieves the type description that corresponds to the specified GUID.
CCmdTarget:: GetTypeLibCCmdTarget::GetTypeLib タイプライブラリへのポインターを取得します。Gets a pointer to a type library.
CCmdTarget:: GetTypeLibCacheCCmdTarget::GetTypeLibCache タイプライブラリキャッシュを取得します。Gets the type library cache.
CCmdTarget:: IsInvokeAllowedCCmdTarget::IsInvokeAllowed オートメーションメソッドの呼び出しを有効にします。Enables automation method invocation.
CCmdTarget:: IsResultExpected 必要です。CCmdTarget::IsResultExpected オートメーション関数が値を返す必要がある場合は、0以外の値を返します。Returns nonzero if an automation function should return a value.
CCmdTarget:: OnCmdMsgCCmdTarget::OnCmdMsg コマンドメッセージをルーティングしてディスパッチします。Routes and dispatches command messages.
CCmdTarget:: OnFinalReleaseCCmdTarget::OnFinalRelease 最後の OLE 参照がリリースされた後にクリーンアップします。Cleans up after the last OLE reference is released.
CCmdTarget:: RestoreWaitCursorCCmdTarget::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 は、 CViewCWinAppCDocumentCWnd、および CFrameWndがあります。Key framework classes derived from CCmdTarget include CView, CWinApp, CDocument, CWnd, and CFrameWnd. 新しいクラスを使用してメッセージを処理する場合は、これらの派生クラスのいずれかからクラスを派生させ CCmdTarget ます。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.

メッセージマップに似たディスパッチマップは、OLE オートメーション機能を公開するために使用され IDispatch ます。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:: BeginWaitCursorCCmdTarget::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 他のアクションでカーソルが変更される可能性があるため、のアクションは、1つのメッセージハンドラーの外部では常に有効とは限りません OnSetCursorThe 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
}

CCmdTarget:: CCmdTargetCCmdTarget::CCmdTarget

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

CCmdTarget();

CCmdTarget::D oOleVerbCCmdTarget::DoOleVerb

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

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

パラメーターParameters

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

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

hWndParenthWndParent
オブジェクトを保持しているドキュメント ウィンドウのハンドル。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。TRUE if successful, otherwise FALSE.

解説Remarks

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

CCmdTarget:: EnableAutomationCCmdTarget::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:: EnableConnectionsCCmdTarget::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:: EnableTypeLibCCmdTarget::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:: EndWaitCursorCCmdTarget::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:: EnumOleVerbsCCmdTarget::EnumOleVerbs

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

BOOL EnumOleVerbs(LPENUMOLEVERB* ppenumOleVerb);

パラメーターParameters

ppenumOleVerbppenumOleVerb
IEnumOLEVERBインターフェイスへのポインターへのポインター。A pointer to a pointer to an IEnumOLEVERB interface.

戻り値Return Value

オブジェクトが少なくとも1つの OLE 動詞 (この場合は * ppenumOleVerb が列挙子インターフェイスを指している) をサポートする場合は TRUE IEnumOLEVERB 。それ以外の場合は 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:: EnumVerbsの実装です。This member function is basically an implementation of IOleObject::EnumVerbs.

CCmdTarget:: FromIDispatchCCmdTarget::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

lpDispatchlpDispatch
IDispatch オブジェクトへのポインター。A pointer to an IDispatch object.

戻り値Return Value

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

解説Remarks

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

CCmdTarget:: GetDispatchIIDCCmdTarget::GetDispatchIID

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

virtual BOOL GetDispatchIID(IID* pIID);

パラメーターParameters

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

戻り値Return Value

成功した場合は TRUE、それ以外の場合は 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). COleControl」を参照してください。See COleControl.

CCmdTarget:: GetIDispatchCCmdTarget::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

bAddRefbAddRef
オブジェクトの参照カウントをインクリメントするかどうかを指定します。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. この関数を呼び出すと、ポインターへの参照が自動的に追加されるため、 IUnknown:: AddRefを呼び出す必要はありません。Calling this function automatically adds a reference to the pointer, so it is not necessary to make a call to IUnknown::AddRef.

CCmdTarget:: GetTypeInfoCountCCmdTarget::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). オーバーライドされない場合、は GetTypeInfoCount 0 を返します。If not overridden, GetTypeInfoCount returns 0. をオーバーライドするには、およびも実装する IMPLEMENT_OLETYPELIB マクロを使用し GetTypeLib GetTypeLibCache ます。To override, use the IMPLEMENT_OLETYPELIB macro, which also implements GetTypeLib and GetTypeLibCache.

CCmdTarget:: GetTypeInfoOfGuidCCmdTarget::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] (/windows/win32/api/guiddef/ns-guiddef-guid)。The [GUID](/windows/win32/api/guiddef/ns-guiddef-guid of the type description.

ppTypeInfoppTypeInfo
インターフェイスへのポインターへのポインター ITypeInfoPointer 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:: GetTypeLibCCmdTarget::GetTypeLib

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

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

パラメーターParameters

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

ppTypeLibppTypeLib
インターフェイスへのポインターへのポインター ITypeLibA 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 GetTypeLibCache ます。Use the IMPLEMENT_OLETYPELIB macro, which also implements GetTypeInfoCount and GetTypeLibCache.

CCmdTarget:: GetTypeLibCacheCCmdTarget::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 GetTypeLib ます。Use the IMPLEMENT_OLETYPELIB macro, which also implements GetTypeInfoCount and GetTypeLib.

CCmdTarget:: IsInvokeAllowedCCmdTarget::IsInvokeAllowed

この関数は IDispatch::Invoke 、特定のオートメーションメソッド ( dispid によって識別される) を呼び出すことができるかどうかを判断するために、MFC のの実装によって呼び出されます。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

IsInvokeAllowed TRUE を返した場合、は 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 必要です。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 オートメーション関数の呼び出しが進行中でない場合に呼び出されると、は0以外の値を返します。IsResultExpected returns a nonzero value if called when an automation function call is not in progress.

CCmdTarget:: OnCmdMsgCCmdTarget::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.

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

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

pHandlerInfopHandlerInfo
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 ます。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:

nCodenCode value PextrapExtra 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()

CCmdTarget:: OnFinalReleaseCCmdTarget::OnFinalRelease

オブジェクトへの最後の 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:: RestoreWaitCursorCCmdTarget::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
CObject クラスCObject Class
階層図Hierarchy Chart
CCmdUI クラスCCmdUI Class
CDocument クラスCDocument Class
CDocTemplate クラスCDocTemplate Class
CWinApp クラスCWinApp Class
CWnd クラスCWnd Class
CView クラスCView Class
CFrameWnd クラスCFrameWnd Class
COleDispatchDriver クラスCOleDispatchDriver Class