Derivar controles de un control estándar

Al igual que ocurre con cualquier clase derivada de CWnd, puede modificar el comportamiento de un control mediante la derivación de una clase nueva a partir de una clase de control existente.

Para crear una clase de control derivada

  1. Derive una clase de una clase de control existente y, si lo desea, invalide la función miembro Create para que proporcione los argumentos necesarios a la función Create de la clase base.

  2. Proporcione funciones miembro de controlador de mensajes y entradas de asignación de mensajes para modificar el comportamiento del control en respuesta a mensajes específicos de Windows. Consulte Asignación de mensajes a funciones.

  3. Brinde funciones miembro nuevas para ampliar la funcionalidad del control (opcional).

El uso de un control derivado en un cuadro de diálogo requiere trabajo adicional. Por lo general, los tipos y las posiciones de los controles de un cuadro de diálogo se especifican en un recurso de plantilla de diálogo. Si crea una clase de control derivada, no puede especificarla en una plantilla de diálogo, ya que el compilador de recursos no sabe nada sobre esta clase derivada.

Para colocar el control derivado en un cuadro de diálogo

  1. Inserte un objeto de la clase de control derivada en la declaración de la clase de diálogo derivada.

  2. Invalide la función miembro OnInitDialog en la clase de diálogo para llamar a la función miembro SubclassDlgItem para el control derivado.

SubclassDlgItem "crea dinámicamente subclases" de un control creado a partir de una plantilla de diálogo. Cuando se crean dinámicamente subclases de un control, el usuario se enlaza a Windows, procesa algunos mensajes dentro de su propia aplicación y, luego, pasa los mensajes restantes a Windows. Para más información, consulte la función miembro SubclassDlgItem de la clase CWnd en la Referencia de MFC. En el ejemplo siguiente, se muestra cómo podría escribir una invalidación de OnInitDialog para llamar a SubclassDlgItem:

BOOL CSubDialog::OnInitDialog()
{
   CDialog::OnInitDialog();

   m_wndMyBtn.SubclassDlgItem(IDC_MYBTN, this);

   return TRUE;
}

Dado que el control derivado se inserta en la clase de diálogo, se construirá cuando se construya el cuadro de diálogo y se destruirá cuando se destruya el cuadro de diálogo. Compare este código con el ejemplo que aparece en Agregar controles a mano.

Consulte también

Creación y uso de controles
Controles