コンテナ内のウィンドウの使い方
更新 : 2007 年 11 月
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 のサンプルを参照してください。