次の方法で共有


CContainedWindowT クラス

更新 : 2007 年 11 月

このクラスは、別のオブジェクトに含まれているウィンドウを実装します。

template <
   class TBase = CWindow,
   class TWinTraits = CControlWinTraits 
>
class CContainedWindowT :
   public TBase

パラメータ

  • TBase
    新規作成するクラスの基本クラス。既定の基本クラスは CWindow です。

  • TWinTraits
    ウィンドウのスタイルを定義する特徴クラス。既定値は CControlWinTraits です。

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

CContainedWindow は、CContainedWindowT の特殊な形式です。基本クラスまたは特徴 (traits) クラスを変更するには、CContainedWindowT を直接使用します。

解説

CContainedWindowT は、別のオブジェクトに含まれているウィンドウを実装します。CContainedWindowT のウィンドウ プロシージャは、コンテナ オブジェクトのメッセージ マップを使ってメッセージを適切なハンドラに送ります。どのメッセージ マップを使うかは、CContainedWindowT オブジェクトを生成するときに指定します。

CContainedWindowT では、既存のウィンドウ クラスをスーパークラス化して、新しいウィンドウを作成できます。Create メソッドは、まず既存のクラスに基づくウィンドウ クラスを登録します。ただし、ウィンドウ プロシージャは既存のクラスのものではなく、CContainedWindowT::WindowProc に変更されます。次に、Create はこの新しいウィンドウ クラスに基づいてウィンドウを作成します。CContainedWindowT の各インスタンスは、それぞれ別のウィンドウ クラスをスーパークラス化できます。

CContainedWindowT は、ウィンドウのサブクラス化もサポートします。SubclassWindow メソッドは、既存のウィンドウを CContainedWindowT オブジェクトにアタッチし、ウィンドウ プロシージャを CContainedWindowT::WindowProc に変更します。CContainedWindowT の各インスタンスは、それぞれ別のウィンドウをサブクラス化できます。

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

指定された CContainedWindowT オブジェクトに対しては、Create または SubclassWindow のいずれかを呼び出します。同じオブジェクトに対して両方のメソッドを呼び出さないでください。

ATL プロジェクト ウィザードで作成されたプロジェクトに [クラスの追加] ダイアログ ボックスから ATL コントロールの追加を選択し、[表示] の [コントロールの追加] オプションを使うと、コントロールを実装するクラスに CContainedWindowT データ メンバが自動的に追加されます。次の例は、コンテナ内のウィンドウの宣言方法を示しています。

public:
   // Declare a contained window data member
   CContainedWindow m_ctlEdit;

   // Initialize the contained window:
   // 1. Pass "Edit" to specify that the contained 
   //    window should be based on the standard 
   //    Windows Edit box
   // 2. Pass 'this' pointer to specify that CAtlEdit 
   //    contains the message map to be used for the 
   //    contained window's message processing
   // 3. Pass the identifier of the message map. '1'
   //    identifies the alternate message map declared
   //    with ALT_MSG_MAP(1)
   CAtlEdit()
      : m_ctlEdit(_T("Edit"), this, 1)
   {
      m_bWindowOnly = TRUE;
   }
// Declare the default message map, identified by '0'
BEGIN_MSG_MAP(CAtlEdit)
   MESSAGE_HANDLER(WM_CREATE, OnCreate)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
   CHAIN_MSG_MAP(CComControl<CAtlEdit>)
// Declare an alternate message map, identified by '1'
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_CHAR, OnChar)
END_MSG_MAP()
// Define OnCreate handler
// When the containing window receives a WM_CREATE
// message, create the contained window by calling
// CContainedWindow::Create
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
   BOOL& /*bHandled*/)
{
   RECT rc;
   GetWindowRect(&rc);
   rc.right -= rc.left;
   rc.bottom -= rc.top;
   rc.top = rc.left = 0;
   m_ctlEdit.Create(m_hWnd, rc, _T("hello"), WS_CHILD | WS_VISIBLE | 
      ES_MULTILINE | ES_AUTOVSCROLL);
   return 0;
}

詳細情報

参照項目

コントロールの作成

ATL チュートリアル

ATL でのウィンドウの使い方

ATL ウィンドウ クラス

ATL プロジェクト ウィザード

ATL プロジェクトの作成

ウィンドウ

Windows SDK の「Windows」および後続のトピック

必要条件

ヘッダー : atlwin.h

参照

参照

CWindow クラス

CWindowImpl クラス

CMessageMap クラス

BEGIN_MSG_MAP

ALT_MSG_MAP

その他の技術情報

CContainedWindowT のメンバ

ATL クラスの概要