Aracılığıyla paylaş


Bağlantı noktaları

Bağlantı noktaları (önceden ole bağlantı noktaları biliniyordu) uygulamak açıklar mfc sınıfları kullanılarak CCmdTarget ve CConnectionPoint.

Geçmişte, Bileşen Nesne Modeli (com) genel bir mekanizma tanımlı (IUnknown::QueryInterface) nesneleri ve arabirimleri işlevlerini göstermek izin.Ancak, nesnelerin belirli arabirimleri çağırmak için kendi yeteneğini göstermek izin verilen karşılık gelen bir mekanizma tanımlanmadı.Yani gelen işaretçiler com nesneleri için tanımlanan (işaretçiler o nesne arabirimlerine) işlenmiş, ancak (nesneyi tutan diğer nesneleri arabirimlerine işaretçiler) giden arabirimler için açık bir modeli değildi.com bağlantı noktaları olarak adlandırılır, bu işlevi destekleyen bir modeli, şimdi vardır.

Bağlantı iki bölümden oluşur: kaynak ve arabirimi uygulayan bir nesne adı verilen arabirim çağıran nesneyle adlı havuz.Kaynak tarafından sergilenen arabirim bağlantı noktasıdır.Bağlantı noktası göstererek havuzlarını kendine (kaynak) bağlantıları kurmak bir kaynak sağlar.Mekanizması bağlantı'nın üzerine ( IConnectionPoint arabirimi), havuz arayüzü için bir işaretçi kaynak nesneye iletilir.Bu işaretçi kaynak üye işlevler kümesi sink's uygulaması için erişim sağlar.Örneğin, yangın havuzu tarafından uygulanan bir olay için kaynak havuzu 's uygulama uygun yöntemini çağırabilir.Bağlantısı aşağıdaki şekilde gösterilmiştir henüz açıklanmış noktası.

Uygulanan bir bağlantı noktası

Gerçekleştirilen bağlantı noktası

Bu modelde, mfc uygulayan CConnectionPoint ve CCmdTarget sınıfları.Türetilmiş sınıfları CConnectionPoint uygulamak IConnectionPoint diğer nesnelere bağlantı noktalarını göstermek için kullanılan arabirim.Türetilmiş sınıfları CCmdTarget uygulamak IConnectionPointContainer tüm nesne kullanılabilir bağlantı noktaları veya belirli bir bağlantı noktasını bulmak arabirimi.

Sınıfınızda uygulanan her bağlantı noktası için bağlantı noktası uygulayan bir bağlantı bölümü bildirmeniz gerekir.Bir veya daha fazla bağlantı noktalarını kullanmaya karar verirseniz, tek bağlantı haritası sınıfınızda bildirmeniz gerekir.Bağlantı haritası, ActiveX denetimi tarafından desteklenen bağlantı noktalarının bir tablodur.

Aşağıdaki örnekler, basit bağlantı haritası ve bir bağlantı noktası göstermektedir.İlk örnek, bağlantı haritası ve nokta bildirir; İkinci örnek, harita ve noktasını uygular.Dikkat CMyClass olması gereken bir CCmdTarget-türetilmiş sınıf.Bu örnekte, kod sınıfı bildiriminde altında eklenen Korunan bölümü:

class CMyClass : public CCmdTarget
{
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 Ve END_CONNECTION_PART makrolar katıştırılmış bir sınıf bildirmek XSampleConnPt (türetilen CConnectionPoint), uyguladığı bu belirli bağlantı'nın üzerine.Herhangi bir geçersiz kılmak istiyorsanız, CConnectionPoint üye işlevler veya kendi üye işlevler eklemek için bunları bu iki makroları bildirin.Örneğin, CONNECTION_IID makro geçersiz kılar CConnectionPoint::GetIID bu iki makroları yerleştirildiğinde üye işlevi.

İkinci örnekte, denetimin uygulama dosyası (.cpp dosyası) kodu eklenir.Bu kod, bağlantı noktası'nı içeren bağlantı haritası uygulayan SampleConnPt:

BEGIN_CONNECTION_MAP(CMyClass, CCmdTarget)
    CONNECTION_PART(CMyClass, IID_ISampleSink, SampleConnPt)
END_CONNECTION_MAP()

Birden çok bağlantı noktası, ek eklemek sınıfınız varsa CONNECTION_PART makroları arasındaki BEGIN_CONNECTION_MAP ve END_CONNECTION_MAP makrolar.

Son olarak, bir çağrı ekleyin EnableConnections sınıfının yapıcısında.Örne?in:

CMyClass::CMyClass()
{
   EnableConnections();
}

Bu kodu ekledikten sonra CCmdTarget-türetilmiş bir sınıf için bir bağlantı noktası sunar ISampleSink arabirimi.Bu örnekte aşağıdaki şekilde gösterilmiştir.

mfc ile uygulanan bir bağlantı noktası

Bağlantı noktası MFC gerçekleştirme

Genellikle, bağlantı noktaları "" destekleyeceklerine — için birden fazla havuzlarını yayın yeteneği aynı arabirime bağlı.Aşağıdaki örnek parçası gösterir nasıl bir bağlantı noktası üzerindeki her havuz yineleme tarafından çok noktaya yayın:

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, geçerli bağlantılar kümesi alır. SampleConnPt bağlantı noktası için bir çağrı ile CConnectionPoint::GetConnections.Daha sonra bağlantıları ve çağrıları aracılığıyla dolaşır ISampleSink::SinkFunc her etkin bağlantı.

Ayrıca bkz.

Kavramlar

MFC COM