Using Contained Windows

ATL implements contained windows with CContainedWindow. A contained window represents a window that delegates its messages to a container object instead of handling them in its own class.

Note   You do not need to derive a class from CContainedWindow in order to use contained windows.

With contained windows, you can either superclass an existing Windows class or subclass an existing window. To create a window that superclasses an existing Windows class, first specify the existing class name in the constructor for the CContainedWindow object. Then call CContainedWindow::Create. To subclass an existing window, you don't need to specify a Windows class name (pass NULL to the constructor). Simply call the CContainedWindow::SubclassWindow method with the handle to the window being subclassed.

You typically use contained windows as data members of a container class. The container does not need to be a window; however, it must derive from CMessageMap.

A contained window can use alternate message maps to handle its messages. If you have more than one contained window, you should declare several alternate message maps, each corresponding to a separate contained window.

Following is an example of a container class with two contained windows:

class CMyContainer : public CMessageMap, ...
{
public:
   CContainedWindow m_wndEdit;
   CContainedWindow m_wndList;

   CMyContainer() : m_wndEdit("Edit", this, 1), 
                    m_wndList("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()

};

For more information about contained windows, see the SUBEDIT sample. For more information about superclassing and subclassing, see Window Procedure Superclassing and Window Procedure Subclassing in the Win32 SDK.


Send feedback to MSDN.Look here for MSDN Online resources.