コンテナ内のウィンドウの使い方

更新 : 2007 年 11 月

ATL は、CContainedWindowT を使用してコンテナ内のウィンドウを実装します。コンテナ内のウィンドウとは、メッセージを自分のクラスで処理するのではなく、コンテナ オブジェクトに処理を任せるウィンドウのことです。

d3cyb342.alert_note(ja-jp,VS.90).gifメモ :

コンテナ内のウィンドウを使用する場合、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 のサンプルを参照してください。

参照

その他の技術情報

ATL ウィンドウ クラス