다음을 통해 공유


CConnectionPoint 클래스

"연결점"이라고 하는 다른 OLE 개체와 통신하는 데 사용하는 특별한 형식의 인터페이스를 정의합니다.

구문

class CConnectionPoint : public CCmdTarget

멤버

공용 생성자

속성 설명
C커넥트ionPoint::C커넥트ionPoint CConnectionPoint 개체를 생성합니다.

공용 메서드

이름 설명
C커넥트ionPoint::Get커넥트ions 연결 맵의 모든 연결 지점을 검색합니다.
C커넥트ionPoint::GetContainer 연결 맵을 소유하는 컨트롤의 컨테이너를 검색합니다.
C커넥트ionPoint::GetIID 연결점의 인터페이스 ID를 검색합니다.
C커넥트ionPoint::GetMax커넥트ions 컨트롤에서 지원하는 최대 연결 지점 수를 검색합니다.
C커넥트ionPoint::GetNext커넥트ion pos의 연결 요소 에 대한 포인터를 검색합니다.
C커넥트ionPoint::GetStartPosition 호출에 전달할 수 있는 POSITION 값을 반환하여 지도 반복을 시작합니다 GetNextConnection .
C커넥트ionPoint::OnAdvise 연결을 설정하거나 끊을 때 프레임워크에서 호출됩니다.
C커넥트ionPoint::QuerySinkInterface 요청된 싱크 인터페이스에 대한 포인터를 검색합니다.

설명

OLE 컨트롤의 기능을 구현하고 노출하는 데 사용되는 일반 OLE 인터페이스와 달리 연결점은 이벤트 발생 및 알림 변경과 같은 다른 개체에 대한 작업을 시작할 수 있는 나가는 인터페이스를 구현합니다.

연결은 "source"라고 하는 인터페이스를 호출하는 개체와 "싱크"라는 인터페이스를 구현하는 개체의 두 부분으로 구성됩니다. 연결점을 노출하면 원본을 통해 싱크가 자체에 대한 연결을 설정할 수 있습니다. 연결점 메커니즘을 통해 원본 개체는 멤버 함수 집합의 싱크 구현에 대한 포인터를 가져옵니다. 예를 들어 싱크에서 구현된 이벤트를 발생하려면 원본에서 싱크 구현의 적절한 메서드를 호출할 수 있습니다.

기본적으로 COleControl-derived 클래스는 두 개의 연결점을 구현합니다. 하나는 이벤트용이고 다른 하나는 속성 변경 알림용입니다. 이러한 연결은 각각 이벤트 발생 및 속성 값이 변경될 때 싱크(예: 컨트롤의 컨테이너)에 알리는 데 사용됩니다. 추가 연결 지점을 구현하기 위해 OLE 컨트롤에 대한 지원도 제공됩니다. 컨트롤 클래스에 구현된 각 추가 연결 지점에 대해 연결 지점을 구현하는 "연결 부분"을 선언해야 합니다. 하나 이상의 연결 지점을 구현하는 경우 컨트롤 클래스에서 단일 "연결 맵"을 선언해야 합니다.

다음 예제에서는 코드의 두 조각으로 구성된 OLE 컨트롤에 대한 Sample 간단한 연결 맵과 하나의 연결 지점을 보여 줍니다. 첫 번째 부분은 연결 맵과 점을 선언하고 두 번째 부분은 이 맵과 점을 구현합니다. 첫 번째 조각은 섹션 아래의 컨트롤 클래스 선언에 삽입됩니다 protected .

// Connection point for ISample interface
BEGIN_CONNECTION_PART(CMyClass, 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 의합니다.

두 번째 코드 조각이 구현 파일()에 삽입됩니다. 컨트롤 클래스의 CPP)입니다. 이 코드는 추가 연결 지점을 SampleConnPt포함하는 연결 맵을 구현합니다.

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

이러한 코드 조각이 삽입되면 샘플 OLE 컨트롤은 인터페이스에 대한 ISampleSink 연결점을 노출합니다.

일반적으로 연결점은 동일한 인터페이스에 연결된 여러 싱크로 브로드캐스트하는 기능인 "멀티캐스팅"을 지원합니다. 다음 코드 조각에서는 연결 지점의 각 싱크를 반복하여 멀티캐스팅을 수행하는 방법을 보여 줍니다.

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

이 예제에서는 호출을 사용하여 연결 지점에서 현재 연결 집합을 검색합니다 SampleConnPtCConnectionPoint::GetConnections. 그런 다음, 연결을 반복하고 모든 활성 연결을 호출 ISampleSink::SinkFunc 합니다.

사용에 CConnectionPoint대한 자세한 내용은 문서 커넥트ion Points를 참조하세요.

상속 계층 구조

CObject

CCmdTarget

CConnectionPoint

요구 사항

헤더: afxdisp.h

C커넥트ionPoint::C커넥트ionPoint

CConnectionPoint 개체를 생성합니다.

CConnectionPoint();

C커넥트ionPoint::Get커넥트ions

이 함수를 호출하여 연결 지점에 대한 모든 활성 연결을 검색합니다.

const CPtrArray* GetConnections();

Return Value

활성 연결 배열(싱크)에 대한 포인터입니다. 배열의 일부 포인터는 NULL일 수 있습니다. 이 배열의 각 비 NULL 포인터는 캐스트 연산자를 사용하여 싱크 인터페이스에 대한 포인터로 안전하게 변환할 수 있습니다.

C커넥트ionPoint::GetContainer

연결 지점에 대한 검색을 위해 프레임워크에서 IConnectionPointContainer 호출됩니다.

virtual LPCONNECTIONPOINTCONTAINER GetContainer();

Return Value

성공하면 컨테이너에 대한 포인터입니다. 그렇지 않으면 NULL입니다.

설명

이 함수는 일반적으로 BEGIN_CONNECTION_PART 매크로에 의해 구현됩니다.

C커넥트ionPoint::GetIID

연결점의 인터페이스 ID를 검색하기 위해 프레임워크에서 호출됩니다.

virtual REFIID GetIID() = 0;

Return Value

연결 지점의 인터페이스 ID에 대한 참조입니다.

설명

이 연결 지점에 대한 인터페이스 ID를 반환하도록 이 함수를 재정의합니다.

C커넥트ionPoint::GetMax커넥트ions

연결 지점에서 지원하는 최대 연결 수를 검색하기 위해 프레임워크에서 호출됩니다.

virtual int GetMaxConnections();

Return Value

컨트롤에서 지원하는 최대 연결 수 또는 제한이 없는 경우 -1입니다.

설명

기본 구현은 제한이 없음을 나타내는 -1을 반환합니다.

컨트롤에 연결할 수 있는 싱크 수를 제한하려면 이 함수를 재정의합니다.

C커넥트ionPoint::GetNext커넥트ion

pos의 연결 요소 에 대한 포인터를 검색합니다.

LPUNKNOWN GetNextConnection(POSITION& pos) const;

매개 변수

pos
이전 GetNextConnection 또는 GetStartPosition 호출에서 반환된 POSITION 값에 대한 참조를 지정합니다.

Return Value

pos 또는 NULL로 지정된 연결 요소에 대한 포인터입니다.

설명

이 함수는 연결 맵의 모든 요소를 반복하는 데 가장 유용합니다. 반복할 때 이 함수에서 반환된 NULL을 건너뜁니다.

예시

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

C커넥트ionPoint::GetStartPosition

GetNext커넥트ion 호출에 전달할 수 있는 POSITION 값을 반환하여 지도 반복을 시작합니다.

POSITION GetStartPosition() const;

Return Value

맵을 반복하기 위한 시작 위치를 나타내는 POSITION 값입니다. 또는 맵이 비어 있는 경우 NULL입니다.

설명

반복 시퀀스는 예측할 수 없습니다. 따라서 "맵의 첫 번째 요소"는 특별한 의미가 없습니다.

예시

C커넥트ionPoint::GetNext커넥트ion에 대한 예제를 참조하세요.

C커넥트ionPoint::OnAdvise

연결이 설정되거나 끊어질 때 프레임워크에서 호출됩니다.

virtual void OnAdvise(BOOL bAdvise);

매개 변수

bAdvise
연결이 설정되는 경우 TRUE입니다. 그렇지 않으면 FALSE입니다.

설명

기본 구현은 아무 작업도 수행하지 않습니다.

싱크가 연결되거나 연결 지점에서 연결을 끊을 때 알림을 원하는 경우 이 함수를 재정의합니다.

C커넥트ionPoint::QuerySinkInterface

요청된 싱크 인터페이스에 대한 포인터를 검색합니다.

virtual HRESULT QuerySinkInterface(
    LPUNKNOWN pUnkSink,
    void** ppInterface);

매개 변수

pUnkSink
요청되는 싱크 인터페이스의 식별자입니다.

ppInterface
pUnkSink로 식별되는 인터페이스 포인터에 대한 포인터입니다. 개체가 이 인터페이스를 지원하지 않으면 * ppInterface 가 NULL로 설정됩니다.

Return Value

표준 HRESULT 값입니다.

참고 항목

CCmdTarget 클래스
계층 구조 차트