CConnectionPoint

A classe CConnectionPoint define um tipo especial de interface usada para se comunicar com outros objetos OLE, chamados de "ponto de conexão". Ao contrário de normais interfaces OLE, que são usadas para implementar e expor a funcionalidade de um Controlarar OLE, um ponto de conexão implementa uma interface de saída que é capaz de iniciar ações em outros objetos, tais como acionar eventos e notificações de alteração.

Uma conexão consiste de duas partes: o objeto chamar a interface, chamada a "fonte" e o objeto implementar a interface, chamado o "coletor". Ao expor um ponto de conexão, uma fonte permite coletores estabelecer conexões a mesmo. Através do mecanismo de ponto de conexão, um objeto de origem Obtém um ponteiro para implementação do coletor de um conjunto de funções de membro. Por exemplo, para acionar um evento implementado pelo coletor, a fonte pode chamar o método adequado de execução do coletor.

Por padrão, um COleControl-derivado classe implementa dois pontos de conexão: um para eventos e outro para a propriedade alterar notificações. Essas conexões são usadas, respectivamente, para o acionamento do evento e para notificar um coletor (por exemplo, o contêiner do Controlarar) quando um valor de propriedade foi alterada. Suporte também é fornecida para controles OLE implementar pontos de conexão adicional. Para cada ponto de conexão adicionais implementado na sua classe de Controlarar, você deve declarar uma "parte de conexão" que implementa o ponto de conexão. Se você implementar um ou mais pontos de conexão, você também precisará declare um simples "mapa de conexão" em sua classe de Controlarar.

O exemplo a seguir demonstra um mapa de conexão simples e um ponto de conexão para o Sample Controlarar OLE, consistindo de dois fragmentos de código: a primeira parte declara o mapa de conexão e ponto; o segundo implementa este mapa e ponto. O primeiro fragmento é inserido na declaração da classe control, sob a seção protegida

 nbsp;   / / Ponto de conexão para a interface de ISample
    BEGI&N_CONNECTION_PART (CSampleCtrl, SampleConnPt)
        CONNECTION_IID(IID_ISampleSink)
    END_CONNECTION_PART(SampleConnPt)

DECLARE_CONNECTION_MAP()

O BEGIN_CONNECTION_PART e END_CONNECTION_PART macros declare uma classe incorporada, XSampleConnPt (derivado de CConnectionPoint) que implementa esse ponto de conexão específico. Se você quiser substituir quaisquer funções de membro CConnectionPoint , ou adicionar funções de membro de sua preferência, declará-los entre essas duas macros. Por exemplo, a macro CONNECTION_IID substitui a função de membro CConnectionPoint::GetIID quando colocado entre essas duas macros.

O segundo fragmento de código é inserido no arquivo de implementação (.CPP) de sua classe de Controlarar. Esse código implementa o mapa da conexão, que inclui o ponto de conexão adicionais,SampleConnPt:

BEGI&N_CONNECTION_MAP (CSampleCtrl, COleControl)
 nbsp;  CONNECTION_PART (CSampleCtrl, IID_ISampleSink, SampleConnPt)
END_CONNECTION_MAP()

Depois que esses fragmentos de código foram inseridos, o Controlarar OLE do exemplo expõe um ponto de conexão para a interface de ISampleSink.

Normalmente, pontos de conexão suportam "multicast"; a capacidade de transmissão a Múltiplo coletores conectados na mesma interface. O fragmento de código a seguir demonstra como realizar multicast por iteração cada coletor em um ponto de conexão:

privatevoid CSampleCtrl::CallSinkFunc()
{
 nbsp;  const CPtrArray * pConnections = m_xSampleConnPt.GetConnections();
    ASSERT (pConnections! = NULL);

int cConnections = pConnections - > GetSize();
    ISampleSink * pSampleSink;
    para (int i = 0; i < cConnections; i + +)
    {
        pSampleSink = (ISampleSink *) (pConnections - > GetAt(i));
        ASSERT (pSampleSink! = NULL);
        pSampleSink - > SinkFunc();
    }
}

Este exemplo recupera o conjunto atual de conexões sobre a SampleConnPt ponto de conexão com um chamar para CConnectionPoint::GetConnections . Ele, em seguida, itera por meio de conexões e chamadas ISampleSink::SinkFunc em cada conexão ativa.

Para obter mais informações sobre como usar CConnectionPoint, consulte o artigo Pontos de conexão na Guia do programador do Visual C++.

# include lt;afxctl.h>

Membros da classe |nbsp; Classe base | Gráfico de hierarquia

Index