// 基底クラス
class CBaseMsgWindow : public CWindowImpl<CBaseMsgWindow>
{
// メッセージマップを三つの部分に分割
BEGIN_MSG_MAP(CBaseMsgWindow)
MESSAGE_HANDLER(WM_LBUTTONDOWN, OnButtonDown)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_LBUTTONDOWN, OnButtonDown2)
ALT_MSG_MAP(2)
MESSAGE_HANDLER(WM_LBUTTONDOWN, OnButtonDown3)
END_MSG_MAP()
LRESULT OnButtonDown(UINT, WPARAM, LPARAM, BOOL&)
{
MessageBox(_T("Hello!"));
return 0;
}
LRESULT OnButtonDown2(UINT, WPARAM, LPARAM, BOOL&)
{
MessageBox(_T("Hello, ATL!"));
return 0;
}
LRESULT OnButtonDown3(UINT, WPARAM, LPARAM, BOOL&)
{
MessageBox(_T("Hello, ATL/WTL!"));
return 0;
}
};
// 派生クラス1
class CHelloWindow : public CBaseMsgWindow
{
BEGIN_MSG_MAP(CHelloWindow)
...
CHAIN_MSG_MAP(CBaseMsgWindow) // 通常のチェーン
END_MSG_MAP()
};
// 派生クラス2
class CHelloWindow2 : public CBaseMsgWindow
{
BEGIN_MSG_MAP(CHelloWindow2)
...
CHAIN_MSG_MAP_ALT(CBaseMsgWindow, 1) // 代替メッセージマップへチェーン
END_MSG_MAP()
};
|