使用包含的窗口

ATL 使用 CContainedWindowT 实现包含的窗口。 包含的窗口表示将消息委托给容器对象的窗口,而不是在其自己的类中处理消息。

注意

你无需从 CContainedWindowT 派生类即可使用包含的窗口。

使用包含的窗口,你可以将现有 Windows 类超类化,或将现有窗口子类化。 若要创建一个将现有 Windows 类超类化的窗口,请先在 CContainedWindowT 对象的构造函数中指定现有类名。 然后调用 CContainedWindowT::Create。 若要对现有窗口子类化,则无需指定 Windows 类名(将 NULL 传递给构造函数)。 只需通过即将子类化的窗口的句柄来调用 CContainedWindowT::SubclassWindow 方法。

通常使用包含的窗口作为容器类的数据成员。 容器不需要是窗口;但必须派生自 CMessageMap

包含的窗口可以使用备用消息映射来处理其消息。 如果有多个包含窗口,则应声明多个备用消息映射,每个映射对应于单独的包含窗口。

示例

以下是具有两个包含窗口的容器类示例:

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 示例。

另请参阅

窗口类