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