次の方法で共有


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

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 のサンプルを参照してください。

参照

その他の技術情報

ATL ウィンドウ クラス