CConnectionPoint

Класс CConnectionPoint определяет Специальный тип интерфейса, используемого для связи с другими объектами OLE, называется "точка подключения". В отличие от обычных интерфейсов OLE, которые используются для реализации и определенную функциональность элемента управления OLE, точка подключения реализует исходящий интерфейс, которая сможет инициировать действия на другие объекты, такие как стрельба события и уведомления об изменениях.

Подключение состоит из двух частей: объект, вызывающий интерфейс, называемый "источник" и объект, реализующий интерфейс, называемый «раковина». Подвергая точки подключения, источник позволяет поглотителей для установления соединения к себе. Через механизм точек подключения исходный объект получает указатель на приемник осуществление ряда функций-членов. К примеру стрелять осуществляемые в приемник события, источник можно вызвать соответствующий метод реализации приемника.

По умолчанию, COleControl-производный класс реализует две точки соединения: один для событий и один для свойства уведомления об изменениях. Эти подключения используются, соответственно, для стрельбы событие и для уведомления приемника (например, элемента управления контейнера) при изменении значения свойства. Поддержка также предоставляется для элементов управления OLE для реализации дополнительные точки подключения. Для каждой точки дополнительного соединения, реализованном в классе элемента управления необходимо объявить «подключение часть», который реализует точку соединения. Также при реализации одной или нескольких точек подключения, необходимо объявить сингл «карты связи» в вашем классе элемента управления.

В следующем примере демонстрируется простое подключение карты и одну точку подключения для Sample управления OLE, состоящая из двух фрагментов кода: первая часть объявляет карты связи и точки; второй реализует этот карты и точка. Первый фрагмент вставляется в объявление класса элемента управления, в разделе защита

 nbsp;   / / Точка подключения для интерфейса ISample
    BEGI&N_CONNECTION_PART (CSampleCtrl, SampleConnPt)
        CONNECTION_IID(IID_ISampleSink)
    END_CONNECTION_PART(SampleConnPt)

DECLARE_CONNECTION_MAP()

Встроенный класс, объявлять макросы BEGIN_CONNECTION_PART и END_CONNECTION_PART XSampleConnPt (производное от CConnectionPoint), который реализует этой точки подключения. Если вы хотите переопределить функций-членов любой CConnectionPoint или добавить свои собственные функции-члены, объявите их между этими двумя макросы. Например макрос CONNECTION_IID переопределяет функцию-член CConnectionPoint::GetIID , когда между этими двумя макросов.

Второй фрагмент кода вставляется в файл реализации (.НПК) от класса элемента управления. Этот код реализует карты связи, которая включает дополнительные соединения точка,SampleConnPt:

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

После вставки эти фрагменты кода примера OLE управления предоставляет точку подключения для интерфейса ISampleSink.

Как правило точки соединения поддерживают «многоадресная рассылка»; возможность трансляции для несколько приемников подключенных к тот же интерфейс. В следующем фрагменте кода показано, как выполнить многоадресной рассылки путем итерации каждый приемник на точки подключения:

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

int cConnections = pConnections - > GetSize();
    ISampleSink * pSampleSink;
    для (внутренне I = 0; I < cConnections; i ++)
    {
        pSampleSink = (ISampleSink *) (pConnections - > GetAt(i));
        ASSERT (pSampleSink! = NULL);
        pSampleSink - > SinkFunc();
    }
}

Этот пример извлекает текущий набор соединений на SampleConnPt точку подключения с помощью вызова CConnectionPoint::GetConnections . Затем выполняется итерация соединения и вызовы ISampleSink::SinkFunc для каждого активного подключения.

Для получения дополнительных сведений об использовании CConnectionPoint, см. статью Точки соединения в Руководстве Visual C++ программист.

# include lt;afxctl.h>

Члены класса |nbsp; Базовый класс | Иерархическая схема

Index