Contêineres de controle ActiveX: manipulando eventos a partir de um controle ActiveX
Este artigo aborda o uso da janela Propriedades (no Modo de Exibição de Classe) para instalar manipuladores de eventos para controles ActiveX em um contêiner de controle ActiveX. Os manipuladores de eventos são usados para receber notificações (do controle) de determinados eventos e executar alguma ação em resposta. Essa notificação é chamada de "acionamento" do evento.
Importante
O ActiveX é uma tecnologia herdada que não deve ser usada para novo desenvolvimento. Para mais informações sobre tecnologias modernas que substituem o ActiveX, confira Controles do ActiveX.
Observação
Este artigo usa um projeto de contêiner de controle ActiveX baseado em caixa de diálogo chamado Contêiner e um controle inserido chamado Circ como exemplos nos procedimentos e no código.
Usando o botão Eventos na janela Propriedades (no Modo de Exibição de Classe), você pode criar um mapa de eventos que podem ocorrer no aplicativo de contêiner de controle ActiveX. Esse mapa, chamado de "mapa do coletor de eventos", é criado e mantido pelo Visual C++ quando você adiciona manipuladores de eventos à classe de contêiner de controle. Cada manipulador de eventos, implementado com uma entrada de mapa de eventos, mapeia um evento específico para uma função membro do manipulador de eventos do contêiner. Essa função do manipulador de eventos é chamada quando o evento especificado é acionado pelo objeto de controle ActiveX.
Para saber mais sobre mapas de coletor de eventos, consulte Mapas de coletor de eventos na Referência da biblioteca de classes.
Modificações do manipulador de eventos no projeto
Quando você usa a janela Propriedades para adicionar manipuladores de eventos, um mapa do coletor de eventos é declarado e definido no projeto. As instruções a seguir são adicionadas ao arquivo .CPP do controle na primeira vez que um manipulador de eventos é adicionado. Esse código declara um mapa do coletor de eventos para a classe da caixa de diálogo (nesse caso, CContainerDlg
):
BEGIN_EVENTSINK_MAP(CContainerDlg, CDialog)
END_EVENTSINK_MAP()
Conforme você usa a janela Propriedades para adicionar eventos, uma entrada de mapa de eventos (ON_EVENT
) é adicionada ao mapa do coletor de eventos e uma função de manipulador de eventos é adicionada ao arquivo de implementação do contêiner (.CPP).
O seguinte exemplo declara um manipulador de eventos, chamado OnClickInCircCtrl
, para o evento ClickIn
do controle Circ:
BEGIN_EVENTSINK_MAP(CContainerDlg, CDialog)
ON_EVENT(CContainerDlg, IDC_CIRCCTRL1, 1 /* ClickIn */, OnClickInCircctrl1,
VTS_I4 VTS_I4)
END_EVENTSINK_MAP()
Além disso, o seguinte modelo é adicionado ao arquivo de implementação (.CPP) da classe CContainerDlg
para a função membro do manipulador de eventos:
BOOL CContainerDlg::OnClickInCircctrl1(OLE_XPOS_PIXELS nX, OLE_YPOS_PIXELS nY)
{
// use nX and nY here
TRACE(_T("nX = %d, nY = %d\n"), nX, nY);
return TRUE;
}
Para saber mais sobre macros de coletores de eventos, consulte Mapas de coletor de eventos na Referência da biblioteca de classes.
Para criar uma função de manipulador de eventos
No Modo de Exibição de Classe, selecione a classe de caixa de diálogo que contém o controle ActiveX. Para este exemplo, use
CContainerDlg
.Na janela Propriedades, clique no botão Eventos.
Na janela Propriedades, selecione a ID do controle ActiveX inserido. Para este exemplo, use
IDC_CIRCCTRL1
.A janela Propriedades exibe uma lista de eventos que podem ser acionados pelo controle ActiveX inserido. Qualquer função membro mostrada em negrito já tem funções de manipulador atribuídas.
Selecione o evento que você deseja que a classe de caixa de diálogo manipule. Neste exemplo, selecione Click.
Na caixa de listagem suspensa à direita, selecione <Adicionar> ClickCircctrl1.
Clique duas vezes na nova função de manipulador no Modo de Exibição de Classe para ir para o código do manipulador de eventos no arquivo de implementação (.CPP) de
CContainerDlg
.