Compartir a través de


CContainedWindowT (clase)

Esta clase implementa una ventana contenida en otro objeto.

Importante

Esta clase y sus miembros no se pueden usar en las aplicaciones que se ejecutan en Windows Runtime.

Sintaxis

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

Parámetros

TBase
Clase base de la nueva clase. El valor predeterminado de esta clase base es CWindow.

TWinTraits
Clase de rasgos que define los estilos de la ventana. El valor predeterminado es CControlWinTraits.

Nota:

CContainedWindow es una especialización de CContainedWindowT. Si desea cambiar la clase base o los rasgos, use CContainedWindowT directamente.

Miembros

Constructores públicos

Nombre Descripción
CContainedWindowT::CContainedWindowT Constructor. Inicializa los miembros de datos para especificar qué asignación de mensajes procesará los mensajes de la ventana contenida.

Métodos públicos

Nombre Descripción
CContainedWindowT::Create Crea una ventana.
CContainedWindowT::DefWindowProc Proporciona el procesamiento de mensajes predeterminado.
CContainedWindowT::GetCurrentMessage Devuelve el mensaje actual.
CContainedWindowT::RegisterWndSuperclass Registra la clase de ventana de la ventana independiente.
CContainedWindowT::SubclassWindow Crea subclases de una ventana.
CContainedWindowT::SwitchMessageMap Cambia el mapa de mensajes que se usa para procesar los mensajes de la ventana contenida.
CContainedWindowT::UnsubclassWindow Restaura una ventana cuyas subclases se han creado previamente.
CContainedWindowT::WindowProc (Estático) Procesa los mensajes enviados a la ventana independiente.

Miembros de datos públicos

Nombre Descripción
CContainedWindowT::m_dwMsgMapID Identifica el mapa de mensajes que procesará los mensajes de la ventana contenida.
CContainedWindowT::m_lpszClassName Especifica el nombre de una clase de ventana existente en la que se basará una clase de ventana nueva.
CContainedWindowT::m_pfnSuperWindowProc Señala al procedimiento de ventana original de la clase de la ventana.
CContainedWindowT::m_pObject Apunta al objeto contenedor.

Comentarios

CContainedWindowT implementa una ventana contenida en otro objeto. El procedimiento de ventana CContainedWindowT utiliza una asignación de mensajes en el objeto contenedor para dirigir los mensajes a los controladores adecuados. Al construir un objeto CContainedWindowT, se especifica qué mapa de mensajes se debe usar.

CContainedWindowT permite crear una nueva ventana mediante la superclase de una clase de ventana existente. El método Create registra primero una clase de ventana que se basa en una clase existente, pero utiliza CContainedWindowT::WindowProc. Después, Create crea una ventana basada en esta nueva clase de ventana. Cada instancia de CContainedWindowT puede crear superclases de una clase de ventana diferente.

CContainedWindowT también permite crear subclases de una ventana. El método SubclassWindow adjunta una ventana existente al objeto CContainedWindowT y cambia el procedimiento de ventana a CContainedWindowT::WindowProc. Cada instancia de CContainedWindowT puede crear subclases de una ventana diferente.

Nota:

Para cualquier objeto CContainedWindowT dado, llame a Create o SubclassWindow. No debe invocar ambos métodos en el mismo objeto.

Al usar la opción Agregar control basado en en el Asistente para proyectos ATL, el asistente agregará automáticamente un miembro de datos CContainedWindowT a la clase que implementa el control. En el ejemplo siguiente se muestra cómo se declara la ventana independiente:

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;
}
Para obtener más información, vea: Vea
Crear controles Tutorial de ATL
Utilizar ventanas en ATL Clases de ventana ATL
Asistente para proyectos ATL Creación de un proyecto ATL
Windows Windows y temas posteriores en Windows SDK

Jerarquía de herencia

TBase

CContainedWindowT

Requisitos

Encabezado: atlwin.h

CContainedWindowT::CContainedWindowT

El constructor inicializa los miembros de datos.

CContainedWindowT(
    LPTSTR lpszClassName,
    CMessageMap* pObject,
    DWORD dwMsgMapID = 0);

CContainedWindowT(
    CMessageMap* pObject,
    DWORD dwMsgMapID = 0)
    CContainedWindowT();

Parámetros

lpszClassName
[in] Nombre de una clase de ventana existente en la que se basará la ventana contenida.

pObject
[in] Puntero al objeto contenedor que declara el mapa de mensajes. La clase de este objeto debe derivarse de CMessageMap.

dwMsgMapID
[in] Identifica el mapa de mensajes que procesará los mensajes de la ventana contenida. El valor predeterminado, 0, especifica el mapa de mensajes predeterminado declarado con BEGIN_MSG_MAP. Para usar un mapa de mensajes alternativo, declarado con ALT_MSG_MAP(msgMapID) se pasa con msgMapID.

Comentarios

Si desea crear una nueva ventana mediante Crear, debe pasar el nombre de una clase de ventana existente para el parámetro lpszClassName. Para obtener un ejemplo, consulte la información general de CContainedWindow.

Hay tres constructores:

  • El constructor con tres argumentos es el que se suele llamar.

  • El constructor con dos argumentos usa el nombre de clase de TBase::GetWndClassName.

  • El constructor sin argumentos se usa si desea proporcionar los argumentos más adelante. Debe proporcionar el nombre de la clase de ventana, el objeto de mapa de mensajes y el identificador de asignación de mensajes cuando más adelante llame a Create.

Si crea una subclase de una ventana existente a través de SubclassWindow, no se usará el valor lpszClassName; por lo tanto, puede pasar NULL para este parámetro.

CContainedWindowT::Create

Llama a RegisterWndSuperclass para registrar una clase de ventana basada en una clase existente, pero usa CContainedWindowT::WindowProc.

HWND Create(
    HWND hWndParent,
    _U_RECT rect,
    LPCTSTR szWindowName = NULL,
    DWORD dwStyle = 0,
    DWORD dwExStyle = 0,
    _U_MENUorID MenuOrID = 0U,
    LPVOID lpCreateParam = NULL);

HWND Create(
    CMessageMap* pObject,
    DWORD dwMsgMapID,
    HWND hWndParent,
    _U_RECT rect,
    LPCTSTR szWindowName = NULL,
    DWORD dwStyle = 0,
    DWORD dwExStyle = 0,
    _U_MENUorID MenuOrID = 0U,
    LPVOID lpCreateParam = NULL);

HWND Create(
    LPCTSTR lpszClassName,
    CMessageMap* pObject,
    DWORD dwMsgMapID,
    HWND hWndParent,
    _U_RECT rect,
    LPCTSTR szWindowName = NULL,
    DWORD dwStyle = 0,
    DWORD dwExStyle = 0,
    _U_MENUorID MenuOrID = 0U,
    LPVOID lpCreateParam = NULL);

Parámetros

lpszClassName
[in] Nombre de una clase de ventana existente en la que se basará la ventana contenida.

pObject
[in] Puntero al objeto contenedor que declara el mapa de mensajes. La clase de este objeto debe derivarse de CMessageMap.

dwMsgMapID
[in] Identifica el mapa de mensajes que procesará los mensajes de la ventana contenida. El valor predeterminado, 0, especifica el mapa de mensajes predeterminado declarado con BEGIN_MSG_MAP. Para usar un mapa de mensajes alternativo, declarado con ALT_MSG_MAP(msgMapID) se pasa con msgMapID.

hWndParent
[in] Identificador de la ventana primaria o propietaria.

rect
[in] Una estructura RECT que especifica la posición de la ventana. La RECT se puede pasar por puntero o por referencia.

szWindowName
[in] Especifica el nombre de la ventana. El valor predeterminado es NULL.

dwStyle
[in] El estilo de la ventana. El valor predeterminado es WS_CHILD | WS_VISIBLE. Para obtener una lista de posibles valores, consulte CreateWindow en Windows SDK.

dwExStyle
[in] Estilos extendidos de la ventana. El valor predeterminado es 0, lo que significa que no hay ningún estilo extendido. Para obtener una lista de posibles valores, consulte CreateWindowEx en Windows SDK.

MenuOrID
[in] Para una ventana secundaria, el identificador de la ventana. Para una ventana de nivel superior, un identificador de menú para la ventana. El valor predeterminado es 0U.

lpCreateParam
[in] Puntero a los datos de creación de ventanas. Para obtener una descripción completa, consulte la descripción del parámetro final en CreateWindowEx.

Valor devuelto

Si se ejecuta correctamente, el identificador de la ventana recién creada, de lo contrario, NULL.

Comentarios

El nombre de clase de ventana existente se guarda en m_lpszClassName. Create a continuación, crea una ventana basada en esta nueva clase. La ventana recién creada se adjunta automáticamente al objeto CContainedWindowT.

Nota:

No llame a Create si ya ha llamado SubclassWindow.

Nota:

Si se usa 0 como valor para el parámetro MenuOrID , se debe especificar como 0U (valor predeterminado) para evitar un error del compilador.

CContainedWindowT::DefWindowProc

Lo llama WindowProc para procesar los mensajes no administrados por el mapa de mensajes.

LRESULT DefWindowProc()
LRESULT DefWindowProc(
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam);

Parámetros

uMsg
[in] Mensaje enviado a la ventana.

wParam
[in] Información adicional específica del mensaje.

lParam
[in] Información adicional específica del mensaje.

Valor devuelto

Resultado del procesamiento de mensajes.

Comentarios

De forma predeterminada, DefWindowProc llama a la función de Win32 CallWindowProc para enviar la información del mensaje al procedimiento de ventana especificado en m_pfnSuperWindowProc.

CContainedWindowT::GetCurrentMessage

Devuelve el mensaje actual (m_pCurrentMsg).

const _ATL_MSG* GetCurrentMessage();

Valor devuelto

El mensaje actual, empaquetado en la estructura MSG.

CContainedWindowT::m_dwMsgMapID

Contiene el identificador del mapa de mensajes que se está usando actualmente para la ventana independiente.

DWORD m_dwMsgMapID;

Comentarios

Este mapa de mensajes debe declararse en el objeto contenedor.

El mapa de mensajes predeterminado, declarado con BEGIN_MSG_MAP, se identifica siempre con 0. Un mapa de mensajes alternativo, declarado con ALT_MSG_MAP(msgMapID) se identifica con msgMapID.

m_dwMsgMapID se inicializa por primera vez por el constructor y se puede cambiar llamando a SwitchMessageMap. Para obtener un ejemplo, consulte Información general de CContainedWindow.

CContainedWindowT::m_lpszClassName

[in] Especifica el nombre de una clase de ventana existente.

LPTSTR m_lpszClassName;

Comentarios

Al crear una ventana, Create registra una nueva clase de ventana basada en esta clase existente, pero usa CContainedWindowT::WindowProc.

El constructor inicializa m_lpszClassName. Para obtener un ejemplo, consulte la información general de CContainedWindow.

CContainedWindowT::m_pfnSuperWindowProc

Si la ventana independiente está en subclase, m_pfnSuperWindowProc apunta al procedimiento de ventana original de la clase de ventana.

WNDPROC m_pfnSuperWindowProc;

Comentarios

Si la ventana independiente está en superclase, lo que significa que se basa en una clase de ventana que modifica una clase existente, m_pfnSuperWindowProc apunta al procedimiento de ventana de la clase de ventana existente.

El método DefWindowProc envía información de mensaje al procedimiento de ventana guardado en m_pfnSuperWindowProc.

CContainedWindowT::m_pObject

Apunta al objeto que contiene el objeto CContainedWindowT.

CMessageMap* m_pObject;

Comentarios

Este contenedor, cuya clase debe derivar de CMessageMap, declara el mapa de mensajes usado por la ventana independiente.

El constructor inicializa m_pObject. Para obtener un ejemplo, consulte la información general de CContainedWindow.

CContainedWindowT::RegisterWndSuperclass

Llamado por Create para registrar la clase de ventana de la ventana independiente.

ATOM RegisterWndSuperClass();

Valor devuelto

Si se ejecuta correctamente, un átomo que identifica de forma única la clase de ventana que se está registrando; de lo contrario, cero.

Comentarios

Esta clase de ventana se basa en una clase existente, pero usa CContainedWindowT::WindowProc. El nombre y el procedimiento de ventana de la clase de ventana existente se guardan en m_lpszClassName y m_pfnSuperWindowProc, respectivamente.

CContainedWindowT::SubclassWindow

Crea subclases de la ventana identificada por hWnd y la adjunta al objeto CContainedWindowT.

BOOL SubclassWindow(HWND hWnd);

Parámetros

hWnd
[in] Identificador de la ventana para la que se van a crear subclases.

Valor devuelto

TRUE si se crean subclases para la ventana correctamente; de lo contrario, FALSE.

Comentarios

La ventana con subclases ahora usa CContainedWindowT::WindowProc. El procedimiento de ventana original se guarda en m_pfnSuperWindowProc.

Nota:

No llame a SubclassWindow si ya ha llamado a Create.

CContainedWindowT::SwitchMessageMap

Cambia el mapa de mensajes que se usará para procesar los mensajes de la ventana contenida.

void SwitchMessageMap(DWORD dwMsgMapID);

Parámetros

dwMsgMapID
[in] Identificador del mapa del mensaje. Para usar el mapa de mensajes predeterminado, declarado con BEGIN_MSG_MAP, pase 0. Para usar un mapa de mensajes alternativo, declarado con ALT_MSG_MAP(msgMapID) se pasa con msgMapID.

Comentarios

El mapa de mensajes debe definirse en el objeto contenedor.

Inicialmente se especifica el identificador de mapa de mensajes en el constructor .

CContainedWindowT::UnsubclassWindow

Desasocia la ventana con subclases del objeto CContainedWindowT y restaura el procedimiento de ventana original, guardado en m_pfnSuperWindowProc.

HWND UnsubclassWindow(BOOL bForce = FALSE);

Parámetros

bForce
[in] Establézcalo en TRUE para forzar la restauración del procedimiento de ventana original aunque el procedimiento de ventana de este objeto CContainedWindowT no esté activo actualmente. Si bForce se establece en FALSE y el procedimiento de ventana de este objeto CContainedWindowT no está activo actualmente, el procedimiento de ventana original no se restaurará.

Valor devuelto

Identificador de la ventana para la que se crearon subclases previamente. Si bForce se establece en FALSE y el procedimiento de ventana de este objeto CContainedWindowT no está activo actualmente, devuelve NULL.

Comentarios

Utilice este método solo si desea restaurar el procedimiento de ventana original antes de que se destruya la ventana. De lo contrario, WindowProc lo hará automáticamente cuando se destruya la ventana.

CContainedWindowT::WindowProc

Este método estático implementa el procedimiento de ventana.

static LRESULT CALLBACK WindowProc(
    HWND hWnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam);

Parámetros

hWnd
[in] Identificador de la ventana.

uMsg
[in] Mensaje enviado a la ventana.

wParam
[in] Información adicional específica del mensaje.

lParam
[in] Información adicional específica del mensaje.

Valor devuelto

Resultado del procesamiento de mensajes.

Comentarios

WindowProc dirige los mensajes al mapa de mensajes identificado por m_dwMsgMapID. Si es necesario, WindowProc llama a DefWindowProc para el procesamiento de mensajes adicional.

Consulte también

CWindow (clase)
CWindowImpl (clase)
CMessageMap (clase)
BEGIN_MSG_MAP
ALT_MSG_MAP(msgMapID)
Información general sobre la clase