コンテナー内のウィンドウの使い方
ATL は、CContainedWindowT を使用してコンテナー内のウィンドウを実装します。 コンテナー内のウィンドウとは、メッセージを自分のクラスで処理するのではなく、コンテナー オブジェクトに処理を任せるウィンドウのことです。
注意
コンテナー内のウィンドウを使用する場合、CContainedWindowT からクラスを派生する必要はありません。
コンテナー内のウィンドウでは、既存のウィンドウ クラスをスーパークラス化したり、既存のウィンドウをサブクラス化したりできます。 既存のウィンドウ クラスをスーパークラス化するウィンドウを作成するには、まず、CContainedWindowT オブジェクトのコンストラクターで既存のクラス名を指定します。 次に、CContainedWindowT::Create を呼び出します。 既存のウィンドウをサブクラス化する場合は、ウィンドウ クラス名を指定せず、コンストラクターに NULL を渡します。 サブクラス化は、対象となるウィンドウのハンドルを指定して CContainedWindowT::SubclassWindow メソッドを呼び出すだけです。
通常、コンテナー内のウィンドウは、コンテナー クラスのデータ メンバーとして使用します。 コンテナーは、ウィンドウでなくてもかまいませんが、CMessageMap の派生クラスである必要があります。
コンテナー内のウィンドウは、代替メッセージ マップを使用してメッセージを処理できます。 コンテナー内のウィンドウが複数ある場合は、各コンテナー内のウィンドウに対応する代替メッセージ マップを宣言する必要があります。
使用例
2 つのコンテナー内のウィンドウを持つコンテナー クラスの例を次に示します。
class CMyContainer : public CMessageMap
{
public:
CContainedWindow m_wndEdit;
CContainedWindow m_wndList;
CMyContainer() : m_wndEdit(_T("Edit"), this, 1),
m_wndList(_T("List"), this, 2)
{
}
BEGIN_MSG_MAP(CMyContainer)
ALT_MSG_MAP(1)
// handlers for the Edit window go here
ALT_MSG_MAP(2)
// handlers for the List window go here
END_MSG_MAP()
};
コンテナー内のウィンドウの詳細については、SUBEDIT のサンプルを参照してください。