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
的詳細資訊,請參閱連接點一文。
繼承階層架構
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
指定先前 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();
}
}
}
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 值。