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
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çãoCreate
de classe base.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.
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
Insira um objeto da classe de controle derivada na declaração da classe de diálogo derivada.
Substitua a função de membro
OnInitDialog
na classe de diálogo para chamar a função de membroSubclassDlgItem
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.