次の方法で共有

Facebook x.com LinkedIn 電子メール

CDynamicChain クラス

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

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 クラスの概要


  • Last updated on 2011年08月09日