Ejemplo SUBEDIT: crea una superclase a partir de un control estándar de Windows

Actualización: noviembre 2007

El ejemplo SUBEDIT muestra cómo crear un control ATL que convierte en superclase el control Edit estándar de Windows.

El ejemplo de atributos SUBEDIT constituye la versión con atributos de este ejemplo.

Nota de seguridad:

Este código de ejemplo se proporciona para ilustrar un concepto y no debe utilizarse en aplicaciones o sitios Web, ya que quizás no ilustre las prácticas de codificación más seguras. Microsoft no asume ninguna responsabilidad por daños incidentales o consecuentes en caso de que el código de ejemplo se utilice para propósitos distintos de aquellos para los que se concibió.

Para obtener ejemplos e instrucciones para su instalación:

  • En el menú Ayuda de Visual Studio, haga clic en Ejemplos.

    Para obtener más información, vea Localizar archivos de ejemplo.

  • La lista de ejemplos completa con la versión más reciente está disponible en línea en la página Visual Studio 2008 Samples.

  • También encontrará ejemplos en el disco duro de su equipo. De manera predeterminada, los ejemplos y el archivo Léame se copian en una carpeta bajo \Archivos de programa\Visual Studio 9.0\Samples\. Para las versiones Express de Visual Studio, todos los ejemplos están en línea.

Generar y ejecutar el ejemplo

Para generar y ejecutar este ejemplo

  1. Abra el archivo de solución SubEdit.sln.

  2. En el menú Generar, haga clic en Generar.

  3. Una vez generado el ejemplo, abra el archivo AtlEdit.htm en el explorador web y pruebe el control.

Puede probar el control en el ActiveX Control Test Container abriendo la clase ATLEdit. Para obtener más detalles sobre cómo obtener acceso a Test Container y utilizarlo para probar un control, vea Probar propiedades y eventos con Test Container.

Convertir un control de Windows en superclase

ATL permite crear un control que convierte en superclase un control estándar de Windows. Así, se puede crear una clase de ventana basada en una clase existente pero que utiliza un procedimiento de ventana diferente. Después, se puede crear una ventana basada en esta nueva clase de ventana. Cuando un control se convierte en superclase, los mensajes se procesan primero mediante un mapa de mensajes ATL antes de ser enviados al procedimiento de ventana original del control. Esto permite modificar el comportamiento predeterminado de los controles estándar de Windows.

Cuando se utiliza el Asistente para controles ATL con el fin de crear un control ActiveX, existe la opción de agregar un control basado en una clase de ventana estándar. En este caso, el asistente agrega una variable miembro de tipo CContainedWindow a la clase del control ActiveX. A continuación, CContainedWindow::Create crea una ventana que convierte en superclase la clase de ventana especificada. Esta ventana utiliza CContainedWindow::WindowProc para enviar sus mensajes a través de un mapa de mensajes. Si un mensaje necesita un procesamiento adicional, se envía al procedimiento de ventana original de la clase de ventana.

Examen del código del ejemplo SUBEDIT (AtlEdit.h)

El constructor de la clase CAtlEdit asigna el valor TRUE a la variable miembro m_bWindowOnly. De esta forma, el control nunca se activará como un control sin ventana.

El constructor CAtlEdit se encarga de inicializar la variable miembro de CContainedWindow, m_EditCtrl. El constructor de CContainedWindow utiliza tres parámetros: el nombre de la clase de ventana que va a pasar a superclase (en este caso, "EDIT"), un puntero a la clase CAtlEdit, que contiene el mapa de mensajes, y el identificador del mapa de mensajes que procesará los mensajes de m_EditCtrl. De forma predeterminada, m_EditCtrl utiliza un mapa de mensajes alternativo, declarado con la macro ALT_MSG_MAP.

El mapa de mensajes predeterminado declara los nombres de las funciones controladoras para los mensajes WM_CREATE y WM_CTLCOLOREDIT enviados al control CAtlEdit. El controlador OnCreate llama a CContainedWindow::Create para crear la ventana de m_EditCtrl. El controlador OnCtlColorEdit especifica un nuevo color de texto y de fondo para m_EditCtrl.

El mapa de mensajes alternativo declara una función controladora para los mensajes WM_CHAR enviados a m_EditCtrl. Este controlador acepta caracteres, no símbolos ni números, y entonces pasa el mensaje WM_CHAR al procedimiento de ventana original definido por la clase Edit de Windows.

Palabras clave

En este ejemplo se utilizan las siguientes palabras clave:

CComCoClass; CComControl; CComModule::GetClassObject; CComModule::GetLockCount; CComModule::Init; CComModule::RegisterServer; CComModule::Term; CComModule::UnregisterServer; CComObjectRoot; CContainedWindow::DefWindowProc; DisableThreadLibraryCalls; GetStockObject; GetWindowRect; IDataObjectImpl; IDispatchImpl; IOleControlImpl; IOleInPlaceActiveObjectImpl; IOleInPlaceObjectWindowlessImpl; IOleInPlaceObjectWindowlessImpl::SetObjectRects; IOleObjectImpl; IPersistStorageImpl; IPersistStreamInitImpl; IProvideClassInfo2Impl; IQuickActivateImpl; ISpecifyPropertyPagesImpl; IViewObjectExImpl; SetBkColor; SetTextColor; SetWindowPos

Vea también

Otros recursos

Ejemplos de ATL