Share via


包含ウィンドウの使用

ATL は、CContainedWindowT を使用して包含ウィンドウを実装します。 包含ウィンドウとは、そのメッセージをそれ自体のクラスで処理する代わりに、コンテナー オブジェクトにデリゲートするウィンドウです。

Note

包含ウィンドウを使用するために、CContainedWindowT からクラスを派生させる必要はありません。

包含ウィンドウでは、既存の Windows クラスをスーパークラス化するか、既存のウィンドウをサブクラス化することができます。 既存の Windows クラスをスーパークラス化するウィンドウを作成するには、まず、CContainedWindowT オブジェクトのコンストラクターに既存のクラス名を指定します。 次に、CContainedWindowT::Create を呼び出します。 既存のウィンドウをサブクラス化するには、Windows クラス名を指定する必要はありません (コンストラクターに 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 のサンプルを参照してください。

関連項目

ウィンドウ クラス