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