Compartir a través de


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

CMessageMap

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_hWndBorra .

  • 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