Adicionando funcionalidade para o Controlarar composto

Depois que você inseriu os controles necessários para o controle composto, a próxima etapa envolve a adição de novas funcionalidades. Essa nova funcionalidade geralmente cai em duas categorias:

Para a finalidade e âmbito de aplicação do presente artigo, a parte restante desta secção centra-se exclusivamente na manipulação de eventos.

Declaração de Interfaces IDispEventImpl para controles contidos

Para cada Controlarar contido, que você deseja manipular eventos do, você deve implementar uma interface de envio de eventos por derivação do classe de modelo IDispEventImpl . Esta derivação é feita in the declaração of your controle composto e consiste de dois parâmetros

A seguinte linha de código de exemplo, encontrada na declaração da classe base, declara uma interface IDispEventImpl para um Controlarar ( IDC_CIRCCTRL1 ), para a classe de Controlarar composto ( CMyCompositeCtrl ).

iDispEventImpllt pública; IDC_CIRCCTL1, CMyCompositeCtrl & gt;

Declaração de mapa de coletor de eventos

Depois de declarar a expedição classes de evento para cada Controlarar contido, você precisará adicionar um mapa de coletor de eventos para o objeto de Controlarar composto. Este mapa realiza duas coisas:

O mapa de coletor de eventos é implementado usando várias macros predefinidas:

BEGIN_SINK_MAP(CtrlName)

Declara o início do mapa de coletor de eventos para o Controlarar composto CtrlName.

SINK_ENTRY(CtrlID, DispIID, dispID, EventHandler)

Declara a função de manipulador (EventHandler) para o evento especificado (dispID), da expedição interface DispIID, para o Controlarar identificado por CtrlID.

END_SINK_MAP()

Declara final o mapa de coletor de eventos para o Controlarar composto CtrlName.

O exemplo de código a seguir (localizado na.CPP arquivo of o controle composto) declara um mapa de coletor de eventos para o CMyCompositeCtrl objeto. Ele declara dois manipuladores de eventos para controles contidos dois ( IDC_CIRCCTL1 e IDC_CIRCCTL2 ). O evento Click para ambos os controles é tratado pelo OnClick_CircCtrl1 e OnClick_CircCtrl2 funções.

BEGI&N_SINK_MAP(CMyCompositeCtrl)
 nbsp; SINK_ENTRY (IDC_CIRCCTL1, DISPID_CLICK, OnClick_CircCtrl1)
   SINK_ENTRY (IDC_CIRCCTL2, DISPID_CLICK, OnClick_CircCtrl2)
END_SINK_MAP()

Uma vez que você tenha declarado o mapa de coletor de eventos, vá para implementar os manipuladores de eventos para o Controlarar composto.

Declaração e implementação de manipuladores de eventos

A declaração da etapa de mapa de coletor de eventos, você adicionou um novo mapa que declarou dois manipuladores de eventos para os dois controles contidos do Circ. Agora é hora de implementar esses manipuladores. O formato é o seguinte:

retVal   stdcall Eve&ntHandler (args)
{
 nbsp; //Handle evento disparando adequadamente
}

onde retVal é o valor de retorno do manipulador de eventos, EventHandler é o nome do manipulador de função, e args é uma lista opcional de argumentos para o evento. Esse nome deve corresponder a um do evento manipuladores declarados no mapa de coletor de evento do Controlarar composto.

O exemplo de código a seguir define um manipulador de eventos (evento Click) para o Controlarar contido identificado porIDC_CIRCCTRL1:

void   stdcall (O&nClick_CircCtrl1)
{
 nbsp; MessageBox ("Click evento acionado!", "CircCtl1", MB_OK);
}

Adicionar manipuladores de eventos para as entradas restantes no evento coletor mapa de seu controle composto.

Iniciando e encerrando o contato com controles contidos

Antes que o Controlarar composto torna-se totalmente ativo, cada Controlarar contido, cujos eventos são manipulação, é consultado para interfaces de saída, tais como uma interface de distribuição do evento. Se forem encontradas quaisquer interfaces, conexões são estabelecidas e uma referência para a interface de saída é usada para manipular eventos de Controlarar. Este procedimento é conhecido como "aconselhando o controle" e é feito automaticamente pelo objeto de Controlarar composto, usando o mapa de coletor de eventos, após a inicialização do Controlarar composto.

Depois que o usuário tenha demitido a caixa de diálogo, todas as referências armazenadas para interfaces de saída de controles contidos são limpos. Isso é conhecido como "unadvising o controle" e também é feito automaticamente pelo Controlarar composto.

Index