CConnectionPoint 클래스
"연결점"이라고 하는 다른 OLE 개체와 통신하는 데 사용하는 특별한 형식의 인터페이스를 정의합니다.
구문
class CConnectionPoint : public CCmdTarget
멤버
공용 생성자
속성 | 설명 |
---|---|
CConnectionPoint::CConnectionPoint | CConnectionPoint 개체를 생성합니다. |
공용 메서드
이름 | 설명 |
---|---|
CConnectionPoint::GetConnections | 연결 맵의 모든 연결 지점을 검색합니다. |
CConnectionPoint::GetContainer | 연결 맵을 소유하는 컨트롤의 컨테이너를 검색합니다. |
CConnectionPoint::GetIID | 연결점의 인터페이스 ID를 검색합니다. |
CConnectionPoint::GetMaxConnections | 컨트롤에서 지원하는 최대 연결 지점 수를 검색합니다. |
CConnectionPoint::GetNextConnection | pos의 연결 요소 에 대한 포인터를 검색합니다. |
CConnectionPoint::GetStartPosition | 호출에 전달할 수 있는 POSITION 값을 반환하여 지도 반복을 시작합니다 GetNextConnection . |
CConnectionPoint::OnAdvise | 연결을 설정하거나 끊을 때 프레임워크에서 호출됩니다. |
CConnectionPoint::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();
}
}
}
이 예제에서는 호출을 사용하여 연결 지점에서 현재 연결 집합을 검색합니다 SampleConnPt
CConnectionPoint::GetConnections
. 그런 다음, 연결을 반복하고 모든 활성 연결을 호출 ISampleSink::SinkFunc
합니다.
사용에 CConnectionPoint
대한 자세한 내용은 연결 지점 문서를 참조하세요.
상속 계층 구조
CConnectionPoint
요구 사항
헤더: afxdisp.h
CConnectionPoint::CConnectionPoint
CConnectionPoint
개체를 생성합니다.
CConnectionPoint();
CConnectionPoint::GetConnections
이 함수를 호출하여 연결 지점에 대한 모든 활성 연결을 검색합니다.
const CPtrArray* GetConnections();
Return Value
활성 연결 배열(싱크)에 대한 포인터입니다. 배열의 일부 포인터는 NULL일 수 있습니다. 이 배열의 각 비 NULL 포인터는 캐스트 연산자를 사용하여 싱크 인터페이스에 대한 포인터로 안전하게 변환할 수 있습니다.
CConnectionPoint::GetContainer
연결 지점에 대한 검색을 위해 프레임워크에서 IConnectionPointContainer
호출됩니다.
virtual LPCONNECTIONPOINTCONTAINER GetContainer();
Return Value
성공하면 컨테이너에 대한 포인터입니다. 그렇지 않으면 NULL입니다.
설명
이 함수는 일반적으로 BEGIN_CONNECTION_PART 매크로에 의해 구현됩니다.
CConnectionPoint::GetIID
연결점의 인터페이스 ID를 검색하기 위해 프레임워크에서 호출됩니다.
virtual REFIID GetIID() = 0;
Return Value
연결 지점의 인터페이스 ID에 대한 참조입니다.
설명
이 연결 지점에 대한 인터페이스 ID를 반환하도록 이 함수를 재정의합니다.
CConnectionPoint::GetMaxConnections
연결 지점에서 지원하는 최대 연결 수를 검색하기 위해 프레임워크에서 호출됩니다.
virtual int GetMaxConnections();
Return Value
컨트롤에서 지원하는 최대 연결 수 또는 제한이 없는 경우 -1입니다.
설명
기본 구현은 제한이 없음을 나타내는 -1을 반환합니다.
컨트롤에 연결할 수 있는 싱크 수를 제한하려면 이 함수를 재정의합니다.
CConnectionPoint::GetNextConnection
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();
}
}
}
CConnectionPoint::GetStartPosition
GetNextConnection 호출에 전달할 수 있는 POSITION 값을 반환하여 지도 반복을 시작합니다.
POSITION GetStartPosition() const;
Return Value
맵을 반복하기 위한 시작 위치를 나타내는 POSITION 값입니다. 또는 맵이 비어 있는 경우 NULL입니다.
설명
반복 시퀀스는 예측할 수 없습니다. 따라서 "맵의 첫 번째 요소"는 특별한 의미가 없습니다.
예시
CConnectionPoint::GetNextConnection에 대한 예제를 참조하세요.
CConnectionPoint::OnAdvise
연결이 설정되거나 끊어질 때 프레임워크에서 호출됩니다.
virtual void OnAdvise(BOOL bAdvise);
매개 변수
bAdvise
연결이 설정되는 경우 TRUE입니다. 그렇지 않으면 FALSE입니다.
설명
기본 구현은 아무 작업도 수행하지 않습니다.
싱크가 연결되거나 연결 지점에서 연결을 끊을 때 알림을 원하는 경우 이 함수를 재정의합니다.
CConnectionPoint::QuerySinkInterface
요청된 싱크 인터페이스에 대한 포인터를 검색합니다.
virtual HRESULT QuerySinkInterface(
LPUNKNOWN pUnkSink,
void** ppInterface);
매개 변수
pUnkSink
요청되는 싱크 인터페이스의 식별자입니다.
ppInterface
pUnkSink로 식별되는 인터페이스 포인터에 대한 포인터입니다. 개체가 이 인터페이스를 지원하지 않으면 * ppInterface 가 NULL로 설정됩니다.
Return Value
표준 HRESULT 값입니다.