CConnectionPoint Sınıfı
"Bağlantı noktası" olarak adlandırılan diğer OLE nesneleriyle iletişim kurmak için kullanılan özel bir arabirim türünü tanımlar.
Sözdizimi
class CConnectionPoint : public CCmdTarget
Üyeler
Ortak Oluşturucular
Veri Akışı Adı | Açıklama |
---|---|
CConnectionPoint::CConnectionPoint | Bir CConnectionPoint nesne oluşturur. |
Genel Yöntemler
Veri Akışı Adı | Açıklama |
---|---|
CConnectionPoint::GetConnections | Bağlantı haritasındaki tüm bağlantı noktalarını alır. |
CConnectionPoint::GetContainer | Bağlantı eşlemesinin sahibi olan denetimin kapsayıcısını alır. |
CConnectionPoint::GetIID | Bağlantı noktasının arabirim kimliğini alır. |
CConnectionPoint::GetMaxConnections | Bir denetim tarafından desteklenen en fazla bağlantı noktası sayısını alır. |
CConnectionPoint::GetNextConnection | Pos'taki bağlantı öğesinin işaretçisini alır. |
CConnectionPoint::GetStartPosition | Bir çağrıya geçirilebilen position değerini döndürerek bir GetNextConnection eşleme yinelemesi başlatır. |
CConnectionPoint::OnAdvise | Bağlantılar kurulurken veya kesildiğinde çerçeve tarafından çağrılır. |
CConnectionPoint::QuerySinkInterface | İstenen havuz arabirimine yönelik bir işaretçi alır. |
Açıklamalar
Bir OLE denetiminin işlevselliğini uygulamak ve kullanıma açmak için kullanılan normal OLE arabirimlerinden farklı olarak, bağlantı noktası olayları tetikleme ve bildirimleri değiştirme gibi diğer nesneler üzerinde eylemler başlatabilen bir giden arabirim uygular.
Bir bağlantı iki bölümden oluşur: "kaynak" olarak adlandırılan arabirimi çağıran nesne ve "havuz" olarak adlandırılan arabirimi uygulayan nesne. Kaynak, bir bağlantı noktasını ortaya çıkartarak havuzların kendisine bağlantı kurmasına olanak tanır. Bağlantı noktası mekanizması aracılığıyla bir kaynak nesne, havuzun bir üye işlevleri kümesini uygulamasına yönelik bir işaretçi alır. Örneğin, havuz tarafından uygulanan bir olayı tetiklerken kaynak, havuz uygulamasının uygun yöntemini çağırabilir.
Varsayılan olarak, türetilmiş bir COleControl
sınıf iki bağlantı noktası uygular: biri olaylar ve biri özellik değişikliği bildirimleri için. Bu bağlantılar sırasıyla olay tetiklenmesi ve bir özellik değeri değiştiğinde havuza (örneğin, denetimin kapsayıcısı) bildirimde bulunılması için kullanılır. Ek bağlantı noktaları uygulamak için OLE denetimleri için de destek sağlanır. Denetim sınıfınızda uygulanan her ek bağlantı noktası için, bağlantı noktasını uygulayan bir "bağlantı bölümü" bildirmeniz gerekir. Bir veya daha fazla bağlantı noktası uygularsanız, denetim sınıfınızda tek bir "bağlantı eşlemesi" de bildirmeniz gerekir.
Aşağıdaki örnekte, ole denetimi için Sample
basit bir bağlantı eşlemesi ve iki kod parçasından oluşan bir bağlantı noktası gösterilmektedir: birinci bölüm bağlantı eşlemesini ve noktasını bildirir; ikincisi bu eşlemeyi ve noktayı uygular. İlk parça, denetim sınıfının bildirimine, bölümünün altına protected
eklenir:
// Connection point for ISample interface
BEGIN_CONNECTION_PART(CMyClass, SampleConnPt)
CONNECTION_IID(IID_ISampleSink)
END_CONNECTION_PART(SampleConnPt)
DECLARE_CONNECTION_MAP()
BEGIN_CONNECTION_PART ve END_CONNECTION_PART makroları, XSampleConnPt
bu belirli bağlantı noktasını uygulayan bir katıştırılmış sınıf (türetilen CConnectionPoint
) bildirir. Herhangi bir CConnectionPoint
üye işlevini geçersiz kılmak veya kendi üye işlevlerinizi eklemek istiyorsanız, bunları bu iki makro arasında bildirin. Örneğin, CONNECTION_IID makro bu iki makro arasına CConnectionPoint::GetIID
yerleştirildiğinde üye işlevini geçersiz kılar.
İkinci kod parçası uygulama dosyasına ( eklenir. CPP) öğesini seçin. Bu kod, ek bağlantı noktasını SampleConnPt
içeren bağlantı eşlemesini uygular:
BEGIN_CONNECTION_MAP(CMyClass, CCmdTarget)
CONNECTION_PART(CMyClass, IID_ISampleSink, SampleConnPt)
END_CONNECTION_MAP()
Bu kod parçaları eklendikten sonra Örnek OLE denetimi arabirim için ISampleSink
bir bağlantı noktası sunar.
Bağlantı noktaları genellikle aynı arabirime bağlı birden çok havuza yayın yapabilme özelliği olan "çok noktaya yayını" destekler. Aşağıdaki kod parçası, bir bağlantı noktasındaki her havuz arasında yineleme yaparak çok noktaya yayın gerçekleştirmeyi gösterir:
void CMyClass::CallSinkFunc()
{
POSITION pos = m_xSampleConnPt.GetStartPosition();
ISampleSink *pSampleSink;
while (pos != NULL)
{
pSampleSink = (ISampleSink *)(m_xSampleConnPt.GetNextConnection(pos));
if (pSampleSink != NULL)
{
pSampleSink->SinkFunc();
}
}
}
Bu örnek, bağlantı CConnectionPoint::GetConnections
noktasında çağrısıyla SampleConnPt
geçerli bağlantı kümesini alır. Ardından bağlantılar üzerinden yinelenir ve her etkin bağlantıda çağrılar ISampleSink::SinkFunc
olur.
kullanma CConnectionPoint
hakkında daha fazla bilgi için Bağlantı Noktaları makalesine bakın.
Devralma Hiyerarşisi
CConnectionPoint
Gereksinimler
Üst bilgi: afxdisp.h
CConnectionPoint::CConnectionPoint
Bir CConnectionPoint
nesne oluşturur.
CConnectionPoint();
CConnectionPoint::GetConnections
Bir bağlantı noktası için tüm etkin bağlantıları almak için bu işlevi çağır.
const CPtrArray* GetConnections();
Dönüş Değeri
Etkin bağlantı dizisine (havuzlar) yönelik bir işaretçi. Dizideki işaretçilerden bazıları NULL olabilir. Bu dizideki NULL olmayan her işaretçi, dönüştürme işleci kullanılarak güvenli bir şekilde havuz arabirimine bir işaretçiye dönüştürülebilir.
CConnectionPoint::GetContainer
Bağlantı noktası için öğesini almak IConnectionPointContainer
üzere çerçeve tarafından çağrılır.
virtual LPCONNECTIONPOINTCONTAINER GetContainer();
Dönüş Değeri
Başarılı olursa kapsayıcının işaretçisi; aksi takdirde NULL.
Açıklamalar
Bu işlev genellikle BEGIN_CONNECTION_PART makro tarafından uygulanır.
CConnectionPoint::GetIID
Bir bağlantı noktasının arabirim kimliğini almak için çerçeve tarafından çağrılır.
virtual REFIID GetIID() = 0;
Dönüş Değeri
Bağlantı noktasının arabirim kimliğine başvuru.
Açıklamalar
Bu bağlantı noktasının arabirim kimliğini döndürmek için bu işlevi geçersiz kılın.
CConnectionPoint::GetMaxConnections
Bağlantı noktası tarafından desteklenen en fazla bağlantı sayısını almak için çerçeve tarafından çağrılır.
virtual int GetMaxConnections();
Dönüş Değeri
Denetim tarafından desteklenen en fazla bağlantı sayısı veya sınır yoksa -1.
Açıklamalar
Varsayılan uygulama, sınır olmadığını gösteren -1 döndürür.
Denetiminize bağlanabilecek havuz sayısını sınırlamak istiyorsanız bu işlevi geçersiz kılın.
CConnectionPoint::GetNextConnection
Pos'taki bağlantı öğesinin işaretçisini alır.
LPUNKNOWN GetNextConnection(POSITION& pos) const;
Parametreler
Pos
Önceki GetNextConnection
veya GetStartPosition çağrısı tarafından döndürülen POSITION değerine başvuru belirtir.
Dönüş Değeri
Pos veya NULL ile belirtilen bağlantı öğesinin işaretçisi.
Açıklamalar
Bu işlev en çok bağlantı haritasındaki tüm öğeler arasında yineleme yapmak için kullanışlıdır. Yinelenirken, bu işlevden döndürülen TÜM NUL'leri atlayın.
Örnek
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 çağrısına geçirilebilen bir POSITION değeri döndürerek eşleme yinelemesi başlatır.
POSITION GetStartPosition() const;
Dönüş Değeri
Eşlemeyi yinelemek için başlangıç konumunu gösteren POSITION değeri; veya eşlem boşsa NULL.
Açıklamalar
Yineleme sırası tahmin edilebilir değildir; bu nedenle, "haritadaki ilk öğe" özel bir öneme sahip değildir.
Örnek
CConnectionPoint::GetNextConnection örneğine bakın.
CConnectionPoint::OnAdvise
Bağlantı kurulurken veya kesildiğinde çerçeve tarafından çağrılır.
virtual void OnAdvise(BOOL bAdvise);
Parametreler
bVise ekle
DOĞRU, bir bağlantı kuruluyorsa; aksi takdirde YANLIŞ.
Açıklamalar
Varsayılan uygulama hiçbir şey yapmaz.
Havuzlar bağlantı noktanıza bağlandığında veya bağlantınızın kesildiğinde bildirim almak istiyorsanız bu işlevi geçersiz kılın.
CConnectionPoint::QuerySinkInterface
İstenen havuz arabirimine yönelik bir işaretçi alır.
virtual HRESULT QuerySinkInterface(
LPUNKNOWN pUnkSink,
void** ppInterface);
Parametreler
pUnkSink
İstenen havuz arabiriminin tanımlayıcısı.
ppInterface
pUnkSink tarafından tanımlanan arabirim işaretçisinin işaretçisi. Nesne bu arabirimi desteklemiyorsa, * ppInterface NULL olarak ayarlanır.
Dönüş Değeri
Standart bir HRESULT değeri.