次の方法で共有


CDynamicChain クラス

このクラスは、メッセージ マップの動的チェーンをサポートするメソッドを提供します。

重要

このクラスとそのメンバーは、Windows ランタイムで実行するアプリケーションで使用することはできません。

構文

class CDynamicChain

メンバー

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

名前 説明
CDynamicChain::CDynamicChain コンストラクター。
CDynamicChain::~CDynamicChain デストラクター。

パブリック メソッド

名前 説明
CDynamicChain::CallChain 別のオブジェクトのメッセージ マップに Windows メッセージを転送します。
CDynamicChain::RemoveChainEntry コレクションからメッセージ マップ エントリを削除します。
CDynamicChain::SetChainEntry コレクションにメッセージ マップ エントリを追加するか、既存のエントリを変更します。

解説

CDynamicChain によりメッセージ マップのコレクションが管理され、実行時に別のオブジェクトのメッセージ マップにメッセージを転送できます。

メッセージ マップの動的チェーンのサポートを追加するには、次の手順を実行します。

  • CDynamicChain からクラスを派生させます。 メッセージ マップで、別のオブジェクトの既定のメッセージ マップにチェーンする CHAIN_MSG_MAP_DYNAMIC マクロを指定します。

  • チェーンするクラスをすべて CMessageMap から派生させます。 CMessageMap を使用すると、オブジェクトがそのセージ マップを他のオブジェクトに公開できます。

  • チェーンするメッセージ マップとオブジェクトを特定するには、CDynamicChain::SetChainEntry を呼び出します。

たとえば、クラスが次のように定義されているとします。

class CMyChainWnd : public CWindowImpl<CMyChainWnd>,
   public CDynamicChain
{
public:
   CMyChainWnd() {}

   BEGIN_MSG_MAP(CMyChainWnd)
      MESSAGE_HANDLER(WM_PAINT, OnPaint)
      MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
      // dynamically chain to the default
      // message map in another object
      CHAIN_MSG_MAP_DYNAMIC(1313)
                // '1313' identifies the object
                // and the message map that will be
                // chained to. '1313' is defined
                // through the SetChainEntry method
   END_MSG_MAP()

   LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
      BOOL& /*bHandled*/)
   {
      // Do some painting code
      return 0;
   }

   LRESULT OnSetFocus(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
      BOOL& /*bHandled*/)
   { 
      return 0;
   }
};

その後、クライアントにより CMyWindow::SetChainEntry が呼び出されます。

myCtl.SetChainEntry(1313, &chainedObj);

ここで chainedObj はチェーン オブジェクトであり、CMessageMap から派生したクラスのインスタンスです。 ここで、OnPaint または OnSetFocus によって処理されないメッセージを myCtl が受信した場合、ウィンドウ プロシージャによって、メッセージが chainedObj の既定のメッセージ マップに転送されます。

メッセージ マップのチェーンの詳細については、"ATL ウィンドウ クラス" のメッセージ マップに関するページを参照してください。

要件

ヘッダー: atlwin.h

CDynamicChain::CallChain

別のオブジェクトのメッセージ マップに Windows メッセージを転送します。

BOOL CallChain(
    DWORD dwChainID,
    HWND hWnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam,
    LRESULT& lResult);

パラメーター

dwChainID
[入力] チェーン オブジェクトとそのメッセージ マップに関連付けられている一意の識別子。

hWnd
[入力] メッセージを受け取るウィンドウへのハンドル。

uMsg
[入力] ウィンドウに送信されたメッセージ。

wParam
[入力] メッセージ固有の追加情報。

lParam
[入力] メッセージ固有の追加情報。

lResult
[出力] メッセージ処理の結果。

戻り値

メッセージが完全に処理される場合は TRUE。それ以外の場合は FALSE。

解説

ウィンドウ プロシージャで CallChain を呼び出す場合は、メッセージマップで CHAIN_MSG_MAP_DYNAMIC を指定する必要があります。 例については、CDynamicChain の概要を参照してください。

CallChain には、dwChainID 値をオブジェクトとそのメッセージ マップに関連付ける SetChainEntry の以前の呼び出しが必要です。

CDynamicChain::CDynamicChain

コンストラクター。

CDynamicChain();

CDynamicChain::~CDynamicChain

デストラクター。

~CDynamicChain();

解説

割り当てられているすべてのリソースを解放します。

CDynamicChain::RemoveChainEntry

コレクションから指定されたメッセージ マップを削除します。

BOOL RemoveChainEntry(DWORD dwChainID);

パラメーター

dwChainID
[入力] チェーン オブジェクトとそのメッセージ マップに関連付けられている一意の識別子。 はじめに、SetChainEntry への呼び出しを使用してこの値を定義します。

戻り値

メッセージ マップがコレクションから正常に削除される場合は TRUE。 それ以外の場合は FALSE。

CDynamicChain::SetChainEntry

指定したメッセージ マップをコレクションに追加します。

BOOL SetChainEntry(
    DWORD dwChainID,
    CMessageMap* pObject,
    DWORD dwMsgMapID = 0);

パラメーター

dwChainID
[入力] チェーン オブジェクトとそのメッセージ マップに関連付けられている一意の識別子。

pObject
[入力] メッセージ マップを宣言するチェーン オブジェクトへのポインター。 このオブジェクトは、CMessageMap から派生している必要があります。

dwMsgMapID
[入力] チェーン オブジェクト内のメッセージ マップの識別子。 既定値は 0 で、BEGIN_MSG_MAP で宣言された既定のメッセージ マップを識別します。 ALT_MSG_MAP(msgMapID) で宣言された代替メッセージ マップを使用するには、msgMapID を渡します。

戻り値

メッセージ マップがコレクションに正常に追加される場合は TRUE。 それ以外の場合は FALSE。

解説

dwChainID 値がコレクションに既に存在する場合、これに関連付けられているオブジェクトとメッセージ マップは、それぞれ pObjectdwMsgMapID に置き換えられます。 それ以外の場合は、新しいエントリが追加されます。

関連項目

CWindowImpl クラス
クラスの概要