CWindowImpl (clase)
Proporciona métodos para crear una ventana o subclases de una ventana.
Importante
Esta clase y sus miembros no se pueden usar en las aplicaciones que se ejecutan en Windows Runtime.
Sintaxis
template <class T, class TBase = CWindow, class TWinTraits = CControlWinTraits>
class ATL_NO_VTABLE CWindowImpl : public CWindowImplBaseT<TBase, TWinTraits>
Parámetros
T
Nueva clase derivada de CWindowImpl
.
TBase
Clase base de la clase. De manera predeterminada, la clase base es CWindow.
TWinTraits
Clase de rasgos que define los estilos de la ventana. El valor predeterminado es CControlWinTraits
.
Miembros
Métodos públicos
Nombre | Descripción |
---|---|
CWindowImpl::Create | Crea una ventana. |
Métodos de CWindowImplBaseT
Nombre | Descripción |
---|---|
DefWindowProc | Proporciona el procesamiento de mensajes predeterminado. |
GetCurrentMessage | Devuelve el mensaje actual. |
GetWindowProc | Devuelve el procedimiento de ventana actual. |
OnFinalMessage | Se llama después de recibir el último mensaje (normalmente WM_NCDESTROY). |
SubclaseWindow | Crea subclases de una ventana. |
UnsubclassWindow | Restaura una ventana cuyas subclases se han creado previamente. |
Métodos estáticos
Nombre | Descripción |
---|---|
GetWndClassInfo | Devuelve una instancia estática de CWndClassInfo, que administra la información de la clase de ventana. |
WindowProc | Procesa los mensajes enviados a la ventana. |
Miembros de datos
Nombre | Descripción |
---|---|
m_pfnSuperWindowProc | Señala al procedimiento de ventana original de la clase de la ventana. |
Comentarios
Puede usar CWindowImpl
para crear una ventana o una subclase de una ventana existente. El procedimiento de ventana CWindowImpl
utiliza una asignación de mensajes para dirigir los mensajes a los controladores adecuados.
CWindowImpl::Create
crea una ventana basándose en la información de la clase de ventana que CWndClassInfo administra. CWindowImpl
contiene la macro DECLARE_WND_CLASS, lo que significa que CWndClassInfo
registra una nueva clase de ventana. Si desea crear una superclase de una clase de ventana existente, derive la clase de CWindowImpl
e incluya la macro DECLARE_WND_SUPERCLASS. En este caso, CWndClassInfo
registra una clase de ventana que se basa en una clase existente, pero utiliza CWindowImpl::WindowProc
. Por ejemplo:
class ATL_NO_VTABLE CMyWindow :
OtherInheritedClasses
public CComControl<CMyWindow>
// CComControl derives from CWindowImpl
{
public:
// 1. The NULL parameter means ATL will generate a
// name for the superclass
// 2. The "EDIT" parameter means the superclass is
// based on the standard Windows Edit box
DECLARE_WND_SUPERCLASS(NULL, _T("EDIT"))
// Remainder of class declaration omitted
Nota:
Dado que CWndClassInfo
administra la información solo para una clase de ventana, cada ventana creada con una instancia de CWindowImpl
se basa en la misma clase de ventana.
CWindowImpl
también permite crear subclases de una ventana. El método SubclassWindow
adjunta una ventana existente al objeto CWindowImpl
y cambia el procedimiento de ventana a CWindowImpl::WindowProc
. Cada instancia de CWindowImpl
puede crear subclases de una ventana diferente.
Nota:
Para cualquier objeto CWindowImpl
dado, llame a Create
o SubclassWindow
. No invoque ambos métodos en el mismo objeto.
Además de CWindowImpl
, ATL proporciona CContainedWindow para crear una ventana incluida en otro objeto.
El destructor de clase base (~CWindowImplRoot
) garantiza que la ventana desaparezca antes de que se destruya el objeto.
CWindowImpl
se deriva de CWindowImplBaseT
, que se deriva de CWindowImplRoot
, que se deriva de TBase
y CMessageMap.
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 |
Jerarquía de herencia
TBase
CWindowImplRoot
CWindowImplBaseT
CWindowImpl
Requisitos
Encabezado: atlwin.h
CWindowImpl::Create
Crea una ventana basada en una nueva clase de ventana.
HWND Create(
HWND hWndParent,
_U_RECT rect = NULL,
LPCTSTR szWindowName = NULL,
DWORD dwStyle = 0,
DWORD dwExStyle = 0,
_U_MENUorID MenuOrID = 0U,
LPVOID lpCreateParam = NULL);
Parámetros
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. Este valor se combina con el estilo proporcionado por la clase traits de la ventana. El valor predeterminado proporciona a la clase traits control total sobre el estilo. Para obtener una lista de posibles valores, consulte CreateWindow en Windows SDK.
dwExStyle
[in] Estilos extendidos de la ventana. Este valor se combina con el estilo proporcionado por la clase traits de la ventana. El valor predeterminado proporciona a la clase traits control total sobre el estilo. 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. En caso contrario, NULL.
Comentarios
Create
primero registra la clase de ventana si aún no se ha registrado. La ventana recién creada se adjunta automáticamente al objeto CWindowImpl
.
Nota:
No llame a Create
si ya ha llamado SubclassWindow.
Para usar una clase ventana basada en una clase de ventana existente, derive la clase de CWindowImpl
e incluya la macro DECLARE_WND_SUPERCLASS. El procedimiento de ventana de la clase de ventana existente se guarda en m_pfnSuperWindowProc. Para más información, consulte la información general sobre CWindowImpl.
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.
CWindowImpl::DefWindowProc
Lo llama WindowProc para procesar los mensajes no administrados por el mapa de mensajes.
LRESULT DefWindowProc(
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
LRESULT DefWindowProc();
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.
La función sin parámetros recupera automáticamente los parámetros necesarios del mensaje actual.
CWindowImpl::GetCurrentMessage
Devuelve el mensaje actual, empaquetado en la estructura MSG
.
const MSG* GetCurrentMessage();
Valor devuelto
Mensaje actual.
CWindowImpl::GetWindowProc
Devuelve WindowProc
, el procedimiento de ventana actual.
virtual WNDPROC GetWindowProc();
Valor devuelto
El procedimiento de ventana actual.
Comentarios
Invalide este método para reemplazar el procedimiento de ventana por el suyo propio.
CWindowImpl::GetWndClassInfo
Llamado por Create para acceder a la información de la clase de ventana.
static CWndClassInfo& GetWndClassInfo();
Valor devuelto
Una instancia estática de CWndClassInfo.
Comentarios
De forma predeterminada, CWindowImpl
obtiene este método a través de la macro DECLARE_WND_CLASS, que especifica una nueva clase de ventana.
Para crear una superclase de una clase de ventana existente, derive la clase de CWindowImpl
e incluya la macro DECLARE_WND_SUPERCLASS para invalidar GetWndClassInfo
. Para más información, consulte la información general sobre CWindowImpl.
Además de usar las macros DECLARE_WND_CLASS y DECLARE_WND_SUPERCLASS, puede invalidar GetWndClassInfo
con una implementación propia.
CWindowImpl::m_pfnSuperWindowProc
Dependiendo de la ventana, apunta a uno de los procedimientos de ventana siguientes.
WNDPROC m_pfnSuperWindowProc;
Comentarios
Tipo de ventana | Procedimiento ventana |
---|---|
Ventana basada en una nueva clase de ventana, especificada a través de la macro DECLARE_WND_CLASS. | La función de Win32 DefWindowProc. |
Una ventana basada en una clase de ventana que modifica una clase existente, especificada a través de la macro DECLARE_WND_SUPERCLASS. | Procedimiento de ventana de la clase de ventana existente. |
Una ventana con subclases. | Procedimiento de ventana original de la ventana con subclases. |
CWindowImpl::DefWindowProc envía información de mensaje al procedimiento de ventana guardado en m_pfnSuperWindowProc
.
CWindowImpl::OnFinalMessage
Se le llama después de recibir el último mensaje (normalmente WM_NCDESTROY).
virtual void OnFinalMessage(HWND hWnd);
Parámetros
hWnd
[in] Identificador de la ventana que se está destruyendo.
Comentarios
La implementación predeterminada de OnFinalMessage
no hace nada, pero puede invalidar esta función para controlar la limpieza antes de destruir una ventana. Si desea eliminar automáticamente el objeto tras la destrucción de la ventana, puede llamar a delete this;
en esta función.
CWindowImpl::SubclassWindow
Crea subclases de la ventana identificada por hWnd y la adjunta al objeto CWindowImpl
.
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 CWindowImpl::WindowProc. El procedimiento de ventana original se guarda en m_pfnSuperWindowProc.
Nota:
No llame a SubclassWindow
si ya ha llamado a Create.
CWindowImpl::UnsubclassWindow
Desasocia la ventana con subclases del objeto CWindowImpl
y restaura el procedimiento de ventana original, guardado en m_pfnSuperWindowProc.
HWND UnsubclassWindow();
Valor devuelto
Identificador de la ventana para la que se crearon subclases previamente.
CWindowImpl::WindowProc
Esta función estática 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
usa la asignación de mensajes predeterminada (declarada con BEGIN_MSG_MAP) para dirigir los mensajes a los controladores adecuados. Si es necesario, WindowProc
llama a DefWindowProc para el procesamiento de mensajes adicional. Si el mensaje final no se controla, WindowProc
haga lo siguiente:
Realiza la anulación de clases si anularon las clases de la ventana.
m_hWnd
Borra .Llama a OnFinalMessage antes de que se destruya la ventana.
Puede invalidar WindowProc
para proporcionar un mecanismo diferente para controlar los mensajes.
Consulte también
BEGIN_MSG_MAP
CComControl (clase)
Información general sobre la clase