次の方法で共有


CDynamicChain クラス

更新 : 2007 年 11 月

このクラスには、メッセージ マップの動的チェインをサポートするメソッドが用意されています。

class CDynamicChain

解説

CDynamicChain は、メッセージ マップのコレクションを管理して、実行時に Windows メッセージを別のオブジェクトのメッセージ マップに送信できるようにします。

メッセージ マップの動的チェインのサポートを追加するには、次の操作を行います。

  • 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 の派生クラスのインスタンスです。この段階で、myCtl が OnPaint でも OnSetFocus でも処理されないメッセージを受け取ると、ウィンドウ プロシージャはこのメッセージを chainedObj の既定のメッセージ マップに送ります。

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

必要条件

ヘッダー : atlwin.h

参照

参照

CWindowImpl クラス

その他の技術情報

CDynamicChain のメンバ

ATL クラスの概要