Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mendefinisikan jenis antarmuka khusus yang digunakan untuk berkomunikasi dengan objek OLE lainnya, yang disebut "titik koneksi."
Sintaks
class CConnectionPoint : public CCmdTarget
Anggota
Konstruktor Publik
| Nama | Deskripsi |
|---|---|
| CConnectionPoint::CConnectionPoint | Membuat CConnectionPoint objek. |
Metode Publik
| Nama | Deskripsi |
|---|---|
| CConnectionPoint::GetConnections | Mengambil semua titik koneksi dalam peta koneksi. |
| CConnectionPoint::GetContainer | Mengambil kontainer kontrol yang memiliki peta koneksi. |
| CConnectionPoint::GetIID | Mengambil ID antarmuka titik koneksi. |
| CConnectionPoint::GetMaxConnections | Mengambil jumlah maksimum titik koneksi yang didukung oleh kontrol. |
| CConnectionPoint::GetNextConnection | Mengambil penunjuk ke elemen koneksi di pos. |
| CConnectionPoint::GetStartPosition | Memulai iterasi peta dengan mengembalikan nilai POSITION yang dapat diteruskan ke GetNextConnection panggilan. |
| CConnectionPoint::OnAdvise | Dipanggil oleh kerangka kerja saat membuat atau memutuskan koneksi. |
| CConnectionPoint::QuerySinkInterface | Mengambil penunjuk ke antarmuka sink yang diminta. |
Keterangan
Tidak seperti antarmuka OLE normal, yang digunakan untuk mengimplementasikan dan mengekspos fungsionalitas kontrol OLE, titik koneksi mengimplementasikan antarmuka keluar yang dapat memulai tindakan pada objek lain, seperti menembakkan peristiwa dan mengubah pemberitahuan.
Koneksi terdiri dari dua bagian: objek yang memanggil antarmuka, yang disebut "sumber," dan objek yang mengimplementasikan antarmuka, yang disebut "sink." Dengan mengekspos titik koneksi, sumber memungkinkan sink untuk membuat koneksi ke dirinya sendiri. Melalui mekanisme titik koneksi, objek sumber mendapatkan penunjuk ke implementasi sink dari sekumpulan fungsi anggota. Misalnya, untuk mengaktifkan peristiwa yang diterapkan oleh sink, sumber dapat memanggil metode implementasi sink yang sesuai.
Secara default, COleControlkelas -turunan mengimplementasikan dua titik koneksi: satu untuk peristiwa dan satu untuk pemberitahuan perubahan properti. Koneksi ini digunakan, masing-masing, untuk penembakan peristiwa dan untuk memberi tahu sink (misalnya, kontainer kontrol) ketika nilai properti telah berubah. Dukungan juga disediakan untuk kontrol OLE untuk menerapkan titik koneksi tambahan. Untuk setiap titik koneksi tambahan yang diterapkan di kelas kontrol, Anda harus mendeklarasikan "bagian koneksi" yang mengimplementasikan titik koneksi. Jika Anda menerapkan satu atau beberapa titik koneksi, Anda juga perlu mendeklarasikan satu "peta koneksi" di kelas kontrol Anda.
Contoh berikut menunjukkan peta koneksi sederhana dan satu titik koneksi untuk Sample kontrol OLE, yang terdiri dari dua fragmen kode: bagian pertama mendeklarasikan peta dan titik koneksi; yang kedua mengimplementasikan peta dan titik ini. Fragmen pertama dimasukkan ke dalam deklarasi kelas kontrol, di bawah bagian protected :
// Connection point for ISample interface
BEGIN_CONNECTION_PART(CMyClass, SampleConnPt)
CONNECTION_IID(IID_ISampleSink)
END_CONNECTION_PART(SampleConnPt)
DECLARE_CONNECTION_MAP()
Makro BEGIN_CONNECTION_PART dan END_CONNECTION_PART mendeklarasikan kelas yang disematkan, XSampleConnPt (berasal dari CConnectionPoint) yang mengimplementasikan titik koneksi khusus ini. Jika Anda ingin mengambil alih fungsi anggota apa pun CConnectionPoint , atau menambahkan fungsi anggota Anda sendiri, nyatakan di antara kedua makro ini. Misalnya, makro CONNECTION_IID mengambil alih CConnectionPoint::GetIID fungsi anggota saat ditempatkan di antara kedua makro ini.
Fragmen kode kedua dimasukkan ke dalam file implementasi (. CPP) dari kelas kontrol Anda. Kode ini mengimplementasikan peta koneksi, yang mencakup titik koneksi tambahan, SampleConnPt:
BEGIN_CONNECTION_MAP(CMyClass, CCmdTarget)
CONNECTION_PART(CMyClass, IID_ISampleSink, SampleConnPt)
END_CONNECTION_MAP()
Setelah fragmen kode ini dimasukkan, kontrol Sampel OLE mengekspos titik koneksi untuk ISampleSink antarmuka.
Biasanya, titik koneksi mendukung "multicasting", yang merupakan kemampuan untuk menyiarkan ke beberapa sink yang terhubung ke antarmuka yang sama. Fragmen kode berikut menunjukkan cara mencapai multicasting dengan melakukan iterasi melalui setiap sink pada titik koneksi:
void CMyClass::CallSinkFunc()
{
POSITION pos = m_xSampleConnPt.GetStartPosition();
ISampleSink *pSampleSink;
while (pos != NULL)
{
pSampleSink = (ISampleSink *)(m_xSampleConnPt.GetNextConnection(pos));
if (pSampleSink != NULL)
{
pSampleSink->SinkFunc();
}
}
}
Contoh ini mengambil kumpulan koneksi saat ini pada SampleConnPt titik koneksi dengan panggilan ke CConnectionPoint::GetConnections. Kemudian iterasi melalui koneksi dan panggilan ISampleSink::SinkFunc pada setiap koneksi aktif.
Untuk informasi selengkapnya tentang menggunakan CConnectionPoint, lihat artikel Poin Koneksi.
Hierarki Warisan
CConnectionPoint
Persyaratan
Header: afxdisp.h
CConnectionPoint::CConnectionPoint
Membuat CConnectionPoint objek.
CConnectionPoint();
CConnectionPoint::GetConnections
Panggil fungsi ini untuk mengambil semua koneksi aktif untuk titik koneksi.
const CPtrArray* GetConnections();
Tampilkan Nilai
Penunjuk ke array koneksi aktif (sink). Beberapa penunjuk dalam array mungkin NULL. Setiap penunjuk non-NULL dalam array ini dapat dikonversi dengan aman ke penunjuk ke antarmuka sink menggunakan operator transmisi.
CConnectionPoint::GetContainer
Dipanggil oleh kerangka kerja untuk mengambil IConnectionPointContainer untuk titik koneksi.
virtual LPCONNECTIONPOINTCONTAINER GetContainer();
Tampilkan Nilai
Jika berhasil, penunjuk ke kontainer; jika tidak, NULL.
Keterangan
Fungsi ini biasanya diimplementasikan oleh makro BEGIN_CONNECTION_PART.
CConnectionPoint::GetIID
Dipanggil oleh kerangka kerja untuk mengambil ID antarmuka titik koneksi.
virtual REFIID GetIID() = 0;
Tampilkan Nilai
Referensi ke ID antarmuka titik koneksi.
Keterangan
Ambil alih fungsi ini untuk mengembalikan ID antarmuka untuk titik koneksi ini.
CConnectionPoint::GetMaxConnections
Dipanggil oleh kerangka kerja untuk mengambil jumlah maksimum koneksi yang didukung oleh titik koneksi.
virtual int GetMaxConnections();
Tampilkan Nilai
Jumlah maksimum koneksi yang didukung oleh kontrol, atau -1 jika tidak ada batas.
Keterangan
Implementasi default mengembalikan -1, menunjukkan tidak ada batas.
Ambil alih fungsi ini jika Anda ingin membatasi jumlah sink yang dapat tersambung ke kontrol Anda.
CConnectionPoint::GetNextConnection
Mengambil penunjuk ke elemen koneksi di pos.
LPUNKNOWN GetNextConnection(POSITION& pos) const;
Parameter
pos
Menentukan referensi ke nilai POSITION yang dikembalikan oleh panggilan sebelumnya GetNextConnection atau GetStartPosition .
Tampilkan Nilai
Penunjuk ke elemen koneksi yang ditentukan oleh pos, atau NULL.
Keterangan
Fungsi ini paling berguna untuk melakukan iterasi melalui semua elemen dalam peta koneksi. Saat melakukan iterasi, lewati NULL apa pun yang dikembalikan dari fungsi ini.
Contoh
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
Memulai iterasi peta dengan mengembalikan nilai POSITION yang dapat diteruskan ke panggilan GetNextConnection .
POSITION GetStartPosition() const;
Tampilkan Nilai
Nilai POSITION yang menunjukkan posisi awal untuk iterasi peta; atau NULL jika peta kosong.
Keterangan
Urutan iterasi tidak dapat diprediksi; oleh karena itu, "elemen pertama dalam peta" tidak memiliki signifikansi khusus.
Contoh
Lihat contoh untuk CConnectionPoint::GetNextConnection.
CConnectionPoint::OnAdvise
Dipanggil oleh kerangka kerja ketika koneksi sedang dibuat atau rusak.
virtual void OnAdvise(BOOL bAdvise);
Parameter
bAdvise
TRUE, jika koneksi sedang dibuat; jika tidak FALSE.
Keterangan
Implementasi default tidak melakukan apa pun.
Ambil alih fungsi ini jika Anda ingin pemberitahuan saat sink tersambung atau terputus dari titik koneksi Anda.
CConnectionPoint::QuerySinkInterface
Mengambil penunjuk ke antarmuka sink yang diminta.
virtual HRESULT QuerySinkInterface(
LPUNKNOWN pUnkSink,
void** ppInterface);
Parameter
pUnkSink
Pengidentifikasi antarmuka sink yang diminta.
ppInterface
Penunjuk ke penunjuk antarmuka yang diidentifikasi oleh pUnkSink. Jika objek tidak mendukung antarmuka ini, * ppInterface diatur ke NULL.
Tampilkan Nilai
Nilai HRESULT standar.