Compartilhar via


Derivando controles 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 membro Create para que ela forneça os argumentos necessários para a função Create da 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. Consulte Mapeamento de 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 posições de controles em uma caixa de diálogo normalmente são especificados em um recurso de modelo de caixa de diálogo. Se você criar uma classe de controle derivada, não poderá especificá-la em um modelo de caixa de diálogo, pois o compilador de recursos não sabe nada sobre sua classe derivada.

Para colocar seu 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 é subclasseado dinamicamente, você se conecta ao Windows, processa algumas mensagens em seu próprio aplicativo e, em seguida, passa as mensagens restantes para o Windows. Para obter mais informações, consulte 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 este código com o exemplo em Adicionar Controles à Mão.

Consulte também

Fazendo e usando controles
Controles