Implementar una ventana, derive una clase de CWindowImpl. En la clase derivada, declarar un mapa de mensajes y las funciones de controlador de mensaje. Ahora puede utilizar la clase de tres maneras diferentes:
Crear una ventana basada en una nueva clase de Windows
CWindowImpl contiene la macro DECLARE_WND_CLASS para declarar la información de la clase de Windows. Esta macro implementa la función GetWndClassInfo , que utiliza CWndClassInfo para definir la información de una nueva clase de Windows. Cuando se llama CWindowImpl::Create , esta clase de Windows está registrada y se crea una nueva ventana.
&Notanbsp;CWindowImpl pasa NULL a la macro DECLARE_WND_CLASS , que significa que ATL generará un nombre de clase de Windows. Para especificar su propio nombre, pase una cadena para DECLARE_WND_CLASS en tu CWindowImpl-clase derivada.
A continuación se presenta un ejemplo de una clase que implementa una ventana basada en una nueva clase de Windows:
clase CMyWindow: CWindowImpllt pública;CMyWindow >,...
{
público:
/ Y, opcionalmente, especifique el nombre de la nueva clase de Windows
DECLARE_WND_CLASS("MyName") / / si no se especifica esta macro en tu
/ / clase, ATL generará un nombre de clase
...
BEGIN_MSG_MAP(CMyWindow)
MESSAGE_HANDLER (WM_PAINT, OnPaint)
END_MSG_MAP()
LRESULT OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
/ / Hacer algún código de pintura
devuelven 0;
}
}
Para crear una ventana, crear una instancia de CMyWindow y, a continuación, llame al método Create.
&Notanbsp; Para reemplazar la información de clase de Windows de forma predeterminada, implemente el método GetWndClassInfo en la clase derivada mediante la configuración de los miembros de CWndClassInfo a los valores adecuados.
Crear superclases de una clase existente de Windows
La macro DECLARE_WND_SUPERCLASS le permite crear una ventana que superclases un Windows existente clase. Especificar esta macro en tu CWindowImpl-clase derivada. Como cualquier otra ventana ATL, los mensajes son manejados por un mapa de mensajes.
Cuando se utiliza DECLARE_WND_SUPERCLASS, se registrará una nueva clase de Windows. Esta nueva clase será la misma que la clase existente especifica, pero reemplazará el procedimiento de ventana con CWindowImpl::WindowProc (o con su función que reemplaza este método).
Siguiente es un ejemplo de una clase que la edición estándar de superclases clase:
clase CMyEdit: CWindowImpllt pública;CMyEdit >,...
{
público:
/ / "Editar" es el nombre de la clase estándar de Windows.
/ / "MyEdit" es el nombre de la nueva clase de Windows
/ / que se basará en la clase de edición.
DECLARE_WND_SUPERCLASS ("Editar", "MyEdit")
...
BEGIN_MSG_MAP(CMyEdit)
MESSAGE_HANDLER (WM_CHAR, OnChar)
END_MSG_MAP()
LRESULT OnChar(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
/ / Hacer algún carácter código de control
}
}
Para crear la ventana de edición de seleccionarlos, cree una instancia de CMyEdit y, a continuación, llame al método Create.
Para obtener más información acerca de crear superclases, consulte Crear superclases de procedimiento de ventana en el SDK de Win32.
Crear subclases de una ventana existente
Subclase una ventana existente, derive una clase de CWindowImpl y declarar un mapa de mensajes, como en los dos casos anteriores. Nota, sin embargo, no especifica cualquier información de clase de Windows, ya que podrá subclase una ventana ya existente.
En lugar de llamar a crear, llamada SubclassWindow y pasarla el controlador a la ventana existente que desea subclase. Una vez que la ventana es una subclase, utilizará su función que reemplaza este método (o CWindowImpl::WindowProc ) para mensajes directos para el mapa de mensajes. Para desasociar una ventana subclases de su objeto, llame a UnsubclassWindow. Luego se restaurará el procedimiento de ventana original de la ventana.
Para obtener más información acerca de subclases, consulte Crear subclases de procedimiento de ventana en el SDK de Win32.