Partilhar via


Derivando controles de um controle padrão

Como 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 Create função de membro para que ela forneça os argumentos necessários para a função de classe Create 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. Veja Mapeamento de Mensagens para Funções.

  3. Fornecer 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 são normalmente 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. Incorpore um objeto da classe de controle derivada na declaração de sua classe de diálogo derivada.

  2. Sobrescreva o método de membro OnInitDialog na sua classe de diálogo para chamar o método de membro SubclassDlgItem para o controle derivado.

SubclassDlgItem "subclasses dinamicamente" um controle criado a partir de um modelo de diálogo. Quando um controle é subclassificado dinamicamente, você se conecta ao Windows, processa algumas mensagens dentro de 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 MFC. O exemplo a seguir 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 é incorporado 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 Adicionando controles manualmente.

Ver também

Criando e usando controles
Controlos