共用方式為


CConnectionPoint 類別

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

語法

class CConnectionPoint : public CCmdTarget

成員

公用建構函式

名稱 描述
C連線ionPoint::C連線ionPoint 建構 CConnectionPoint 物件。

公用方法

名稱 描述
C連線ionPoint::Get連線ions 擷取連接對應中的所有連接點。
C連線ionPoint::GetContainer 擷取擁有連接對應之控制項的容器。
C連線ionPoint::GetIID 擷取連接點的介面識別碼。
C連線ionPoint::GetMax連線ions 擷取 控制項支援的最大連接點數目。
C連線ionPoint::GetNext連線ion 擷取位於 pos 的連接專案 指標。
C連線ionPoint::GetStartPosition 傳回可傳遞至 GetNextConnection 呼叫的 POSITION 值,以啟動地圖反復專案。
C連線ionPoint::OnAdvise 建立或中斷連線時,由架構呼叫。
C連線ionPoint::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

C連線ionPoint::C連線ionPoint

建構 CConnectionPoint 物件。

CConnectionPoint();

C連線ionPoint::Get連線ions

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

const CPtrArray* GetConnections();

傳回值

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

C連線ionPoint::GetContainer

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

virtual LPCONNECTIONPOINTCONTAINER GetContainer();

傳回值

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

備註

此函式通常是由 BEGIN_CONNECTION_PART 宏實作。

C連線ionPoint::GetIID

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

virtual REFIID GetIID() = 0;

傳回值

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

備註

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

C連線ionPoint::GetMax連線ions

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

virtual int GetMaxConnections();

傳回值

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

備註

預設實作會傳回 -1,表示沒有限制。

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

C連線ionPoint::GetNext連線ion

擷取位於 pos 的連接專案 指標。

LPUNKNOWN GetNextConnection(POSITION& pos) const;

參數

pos
指定先前 GetNextConnection GetStartPosition 呼叫所傳回之 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();
      }
   }
}

C連線ionPoint::GetStartPosition

傳回可傳遞至 GetNext連線ion 呼叫的 POSITION 值,以啟動地圖反復專案。

POSITION GetStartPosition() const;

傳回值

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。

傳回值

標準 HRESULT 值。

另請參閱

CCmdTarget 類別
階層架構圖表