Prinsip Penanganan Peristiwa
Ada tiga langkah umum untuk semua penanganan peristiwa. Anda harus:
Terapkan antarmuka peristiwa pada objek Anda.
Beri tahu sumber peristiwa bahwa objek Anda ingin menerima peristiwa.
Buka sumber peristiwa saat objek Anda tidak perlu lagi menerima peristiwa.
Cara Anda mengimplementasikan antarmuka peristiwa akan bergantung pada jenisnya. Antarmuka peristiwa dapat vtable, ganda, atau dispinterface. Terserah perancang sumber peristiwa untuk menentukan antarmuka; terserah Anda untuk mengimplementasikan antarmuka tersebut.
Catatan
Meskipun tidak ada alasan teknis bahwa antarmuka peristiwa tidak dapat ganda, ada sejumlah alasan desain yang baik untuk menghindari penggunaan ganda. Namun, ini adalah keputusan yang dibuat oleh perancang/pelaksana sumber peristiwa. Karena Anda bekerja dari perspektif peristiwa sink
, Anda perlu mengizinkan kemungkinan bahwa Anda mungkin tidak memiliki pilihan apa pun tetapi untuk mengimplementasikan antarmuka peristiwa ganda. Untuk informasi selengkapnya tentang antarmuka ganda, lihat Antarmuka Ganda dan ATL.
Memberi tahu sumber peristiwa dapat dipecah menjadi tiga langkah:
Kueri objek sumber untuk IConnectionPointContainer.
Panggil IConnectionPointContainer::FindConnectionPoint melewati IID antarmuka peristiwa yang menarik bagi Anda. Jika berhasil, ini akan mengembalikan antarmuka IConnectionPoint pada objek titik koneksi.
Panggil IConnectionPoint::Sarankan
IUnknown
melewati sink peristiwa. Jika berhasil, ini akan mengembalikan cookie yangDWORD
mewakili koneksi.
Setelah Anda berhasil mendaftarkan minat Anda untuk menerima peristiwa, metode pada antarmuka peristiwa objek Anda akan dipanggil sesuai dengan peristiwa yang diaktifkan oleh objek sumber. Ketika Anda tidak perlu lagi menerima peristiwa, Anda dapat meneruskan cookie kembali ke titik koneksi melalui IConnectionPoint::Unadvise. Ini akan memutus koneksi antara sumber dan sink.
Berhati-hatilah untuk menghindari siklus referensi saat menangani peristiwa.