Uso de ventanas contenidas
ATL implementa ventanas contenidas con CContainedWindowT. Una ventana contenida representa una ventana que delega sus mensajes en un objeto contenedor, en vez de manejarlos en su propia clase.
Nota:
No es necesario derivar una clase de CContainedWindowT
para poder usar ventanas contenidas.
Con las ventanas contenidas, puede convertir una clase existente de Windows en una superclase o una ventana existente en una subclase. Para crear una ventana que convierta una clase existente de Windows en una superclase, especifique primero el nombre de clase existente en el constructor del objeto CContainedWindowT
. A continuación, llame a CContainedWindowT::Create
. Para convertir una ventana existente en una subclase, no es necesario especificar un nombre de clase de Windows (pase un valor NULL al constructor). Simplemente llame al método CContainedWindowT::SubclassWindow
con el identificador dirigido a la ventana que se está convirtiendo en subclase.
Normalmente, las ventanas contenidas se usan como miembros de datos de una clase de contenedor. El contenedor no necesita ser una ventana; sin embargo, debe derivarse de CMessageMap.
Una ventana contenida puede usar mapas de mensajes alternativos para controlar sus mensajes. Si tiene más de una ventana contenida, debe declarar varias asignaciones de mensajes alternativas, y cada una debe corresponder a una ventana contenida diferente.
Ejemplo
A continuación se muestra un ejemplo de una clase de contenedor con dos ventanas contenidas:
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()
};
Para más información sobre las ventanas contenidas, vea el ejemplo SUBEDIT.