共用方式為


CConnectionPoint 類別

定義用來與其他 OLE 物件通訊的特殊介面類型,稱為「連接點」。

語法

class CConnectionPoint : public CCmdTarget

成員

公用建構函式

名稱 描述
CConnectionPoint::CConnectionPoint 建構 CConnectionPoint 物件。

公用方法

名稱 描述
CConnectionPoint::GetConnections 擷取連接對應中的所有連接點。
CConnectionPoint::GetContainer 擷取擁有連接對應之控件的容器。
CConnectionPoint::GetIID 擷取連接點的介面標識碼。
CConnectionPoint::GetMaxConnections 擷取 控件支援的最大連接點數目。
CConnectionPoint::GetNextConnection 擷取位於 pos 的連接項目指標。
CConnectionPoint::GetStartPosition 傳回可傳遞至 GetNextConnection 呼叫的 POSITION 值,以啟動地圖反覆專案。
CConnectionPoint::OnAdvise 建立或中斷連線時,由架構呼叫。
CConnectionPoint::QuerySinkInterface 擷取所要求接收介面的指標。

備註

與用來實作和公開 OLE 控件功能的一般 OLE 介面不同,連接點會實作能夠起始其他物件動作的傳出介面,例如引發事件和變更通知。

連接包含兩個部分:呼叫 介面的物件,稱為「來源」,以及實作介面的物件,稱為「接收」。藉由公開連接點,來源可讓接收建立本身的連線。 透過連接點機制,來源物件會取得接收一組成員函式實作的指標。 例如,若要引發接收實作的事件,來源可以呼叫接收實作的適當方法。

根據預設,衍生類別會實作兩個連接點:一個 COleControl用於事件,另一個用於屬性變更通知。 當屬性值變更時,會分別使用這些連線來引發事件,以及通知接收(例如,控件的容器)。 也提供 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的詳細資訊,請參閱連接點一文

繼承階層架構

CObject

CCmdTarget

CConnectionPoint

需求

標頭: afxdisp.h

CConnectionPoint::CConnectionPoint

建構 CConnectionPoint 物件。

CConnectionPoint();

CConnectionPoint::GetConnections

呼叫此函式以擷取連接點的所有作用中連接。

const CPtrArray* GetConnections();

傳回值

使用中連接陣列的指標(接收)。 數位中的某些指標可能是NULL。 此陣列中的每個非NULL指標都可以使用轉換運算元安全地轉換成接收介面的指標。

CConnectionPoint::GetContainer

由架構呼叫以擷取 IConnectionPointContainer 連接點的 。

virtual LPCONNECTIONPOINTCONTAINER GetContainer();

傳回值

如果成功,則為容器的指標;否則為 NULL。

備註

此函式通常是由 BEGIN_CONNECTION_PART 巨集實作。

CConnectionPoint::GetIID

由架構呼叫以擷取連接點的介面標識碼。

virtual REFIID GetIID() = 0;

傳回值

連接點介面識別碼的參考。

備註

覆寫此函式以傳回這個連接點的介面標識碼。

CConnectionPoint::GetMaxConnections

由架構呼叫以擷取連接點所支援的最大連線數目。

virtual int GetMaxConnections();

傳回值

控件支持的連線數目上限,如果沒有限制,則為 -1。

備註

默認實作會傳回 -1,表示沒有限制。

如果您想要限制可以連線到控件的接收數目,請覆寫此函式。

CConnectionPoint::GetNextConnection

擷取位於 pos 的連接項目指標。

LPUNKNOWN GetNextConnection(POSITION& pos) const;

參數

pos
指定先前 GetNextConnectionGetStartPosition 呼叫所傳回之 POSITION 值的參考。

傳回值

pos 或 NULL 所指定之連接專案的指標。

備註

此函式最適合用來逐一查看連接對應中的所有元素。 在反覆運算時,請略過從此函式傳回的任何 NUL。

範例

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;

傳回值

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。

傳回值

標準 HRESULT 值。

另請參閱

CCmdTarget 類別
階層架構圖表