Compartilhar via


Classe CConnectionPoint

Define um tipo especial de interface usada para se comunicar com outros objetos VELHOS, chamado “um ponto de conexão.”

class CConnectionPoint : public CCmdTarget

Membros

Construtores public

Nome

Descrição

CConnectionPoint::CConnectionPoint

Constrói um objeto de CConnectionPoint .

Métodos públicos

Nome

Descrição

CConnectionPoint::GetConnections

Recupera todos os pontos de conexão em um mapa de conexão.

CConnectionPoint::GetContainer

Recupera o contêiner do controle que possui o mapa de conexão.

CConnectionPoint::GetIID

Recupera a interface identificação de um ponto de conexão.

CConnectionPoint::GetMaxConnections

Retorna o número máximo de pontos de conexão suportadas por um controle.

CConnectionPoint::GetNextConnection

Recupera um ponteiro para o elemento de conexão em pos.

CConnectionPoint::GetStartPosition

Inicia uma iteração de mapa de POSIÇÃO retornando um valor que pode ser passado para uma chamada de GetNextConnection .

CConnectionPoint::OnAdvise

Chamado pela estrutura para interromper ou estabelecer conexões.

CConnectionPoint::QuerySinkInterface

Recupera um ponteiro para a interface solicitada do coletor.

Comentários

A o contrário das interfaces VELHOS normais, que são usadas para implementar e expor a funcionalidade de um controlador do OLE, um ponto de conexão implementa uma interface de saída que pode iniciar ações em outros objetos, como eventos do acionamento e notificações de alteração.

Uma conexão consiste em duas partes: o objeto que chama a interface, como a origem chamado “,” e o objeto que implementa a interface, o coletor chamaram “.” Expõe um ponto de conexão, uma fonte permite que os dissipadores estabelecer conexões a se. Por o mecanismo de ponto de conexão, um objeto de origem obtém um ponteiro para a implementação de coleta de um conjunto de funções de membro. Por exemplo, para acionar um evento implementado pelo coletor, a fonte pode chamar o método apropriado da implementação do coletor.

Por padrão, COleControl- a classe derivada implementa dois pontos de conexão: para um evento e um para notificações de alteração de propriedade. Essas conexões são usadas, respectivamente, para o acionamento do evento e notificando um coletor (por exemplo, o recipiente do controle) quando um valor de propriedade mudou. Suporte também é fornecido para que os controladores OLE implementa pontos de conexão adicionais. Para cada ponto de conexão adicional implementado em sua classe de controle, você deve declarar uma conexão de “parte” que implementa o ponto de conexão. Se você implementar um ou mais pontos de conexão, você também precisará declarar um único “mapa de conexão” na sua classe de controle.

O exemplo a seguir demonstra um mapeamento simples de conexão e um ponto de conexão para o controlador do OLE Sample , que consiste em duas partes de código a seguir: a primeira parte declara o mapa e o ponto de conexão; o segundo implementa esses mapa e ponto. O primeiro fragmento é inserido na declaração de classe do controle, na seção de protected :

// Connection point for ISample interface
 BEGIN_CONNECTION_PART(CMyClass, SampleConnPt)
     CONNECTION_IID(IID_ISampleSink)
 END_CONNECTION_PART(SampleConnPt)

 DECLARE_CONNECTION_MAP()

Macros de BEGIN_CONNECTION_PART e de END_CONNECTION_PART declare uma classe inserido, XSampleConnPt (derivado de CConnectionPoint) que implementa este ponto de conexão específica. Se você deseja substituir as funções de membro de CConnectionPoint , ou acrescenta funções de membro da própria, declará-las entre esses dois macros. Por exemplo, a macro de CONNECTION_IID substitui a função de membro de CConnectionPoint::GetIID quando colocado entre esses dois macros.

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

BEGIN_CONNECTION_MAP(CMyClass, CCmdTarget)
    CONNECTION_PART(CMyClass, IID_ISampleSink, SampleConnPt)
END_CONNECTION_MAP()

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

Normalmente, os pontos de conexão oferecem suporte ao “que é chamado de musticasting”, que é a capacidade para passar para vários dissipadores conectados a mesma interface. O fragmento de código a seguir demonstra como realizar o que é chamado de musticasting iterando através de cada coleta em um ponto de conexão:

void CMyClass::CallSinkFunc()
{
    POSITION pos = m_xSampleConnPt.GetStartPosition();
    ISampleSink* pSampleSink;
    while( pos != NULL )
    {
        pSampleSink = (ISampleSink*)(m_xSampleConnPt.GetNextConnection(pos));
        if(pSampleSink != NULL)
            pSampleSink->SinkFunc();
    }
}

Este exemplo retorna o conjunto atual de conexões no ponto de conexão de SampleConnPt com uma chamada a CConnectionPoint::GetConnections. Então itera através de conexões e chama ISampleSink::SinkFunc em cada conexão ativa.

Para obter mais informações sobre como usar CConnectionPoint, consulte o artigo pontos de conexão.

Hierarquia de herança

CObject

CCmdTarget

CConnectionPoint

Requisitos

Cabeçalho: afxdisp.h

Consulte também

Referência

Classe CCmdTarget

Gráfico da hierarquia