Partilhar via


Derivando controles a partir de um controle padrão

Assim como acontece com qualquer classe derivada de CWnd, você pode modificar o comportamento de um controle derivando uma nova classe de uma classe de controle existente.

Para criar uma classe de controle derivada

  1. Derive sua classe de uma classe de controle existente e, opcionalmente, substitua a função de membro Create para que ela forneça os argumentos necessários para a função Create de classe base.

  2. Forneça funções de membro do manipulador de mensagens e entradas de mapa de mensagens para modificar o comportamento do controle em resposta a mensagens específicas do Windows. Confira Como mapear mensagens para funções.

  3. Forneça novas funções de membro para estender a funcionalidade do controle (opcional).

Usar um controle derivado em uma caixa de diálogo requer trabalho extra. Os tipos e as posições dos controles em uma caixa de diálogo normalmente são especificados em um recurso de modelo de diálogo. Se você criar uma classe de controle derivada, não poderá especificá-la em um modelo de diálogo, pois o compilador de recursos não sabe nada sobre sua classe derivada.

Para colocar o controle derivado em uma caixa de diálogo

  1. Insira um objeto da classe de controle derivada na declaração da classe de diálogo derivada.

  2. Substitua a função de membro OnInitDialog na classe de diálogo para chamar a função de membro SubclassDlgItem para o controle derivado.

SubclassDlgItem define uma "subclasse dinamicamente" para um controle criado com base em um modelo de caixa de diálogo. Quando um controle tem uma subclasse definida dinamicamente, você conecta ao Windows, processa algumas mensagens em seu aplicativo e passa as mensagens restantes para o Windows. Para mais informações, confira a função de membro SubclassDlgItem da classe CWnd na Referência do MFC. O seguinte exemplo mostra como você pode escrever uma substituição de OnInitDialog para chamar SubclassDlgItem:

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

   m_wndMyBtn.SubclassDlgItem(IDC_MYBTN, this);

   return TRUE;
}

Como o controle derivado é inserido na classe de diálogo, ele será construído quando a caixa de diálogo for construída e será destruído quando a caixa de diálogo for destruída. Compare esse código com o exemplo em Como adicionar controles à mão.

Confira também

Criando e usando controles
Controles