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 |
---|---|
Constrói um objeto de CConnectionPoint . |
Métodos públicos
Nome |
Descrição |
---|---|
Recupera todos os pontos de conexão em um mapa de conexão. |
|
Recupera o contêiner do controle que possui o mapa de conexão. |
|
Recupera a interface identificação de um ponto de conexão. |
|
Retorna o número máximo de pontos de conexão suportadas por um controle. |
|
Recupera um ponteiro para o elemento de conexão em pos. |
|
Inicia uma iteração de mapa de POSIÇÃO retornando um valor que pode ser passado para uma chamada de GetNextConnection . |
|
Chamado pela estrutura para interromper ou estabelecer conexões. |
|
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
CConnectionPoint
Requisitos
Cabeçalho: afxdisp.h