Peta Pesan (ATL)
Peta pesan mengaitkan fungsi handler dengan pesan, perintah, atau pemberitahuan tertentu. Dengan menggunakan makro peta pesan ATL, Anda dapat menentukan peta pesan untuk jendela. Prosedur jendela di CWindowImpl
, CDialogImpl
, dan CContainedWindowT
mengarahkan pesan jendela ke peta pesannya.
Fungsi handler pesan menerima argumen tambahan jenis BOOL&
. Argumen ini menunjukkan apakah pesan telah diproses, dan diatur ke TRUE secara default. Fungsi handler kemudian dapat mengatur argumen ke FALSE untuk menunjukkan bahwa ia belum menangani pesan. Dalam hal ini, ATL akan terus mencari fungsi handler lebih lanjut di peta pesan. Dengan mengatur argumen ini ke FALSE, Anda dapat terlebih dahulu melakukan beberapa tindakan sebagai respons terhadap pesan lalu mengizinkan pemrosesan default atau fungsi handler lain untuk menyelesaikan penanganan pesan.
Peta Pesan Berantai
ATL juga memungkinkan Anda untuk menautkan peta pesan, yang mengarahkan penanganan pesan ke peta pesan yang ditentukan di kelas lain. Misalnya, Anda dapat menerapkan penanganan pesan umum di kelas terpisah untuk memberikan perilaku seragam untuk semua rantai windows ke kelas tersebut. Anda dapat menautkan ke kelas dasar atau ke anggota data kelas Anda.
ATL juga mendukung penautan dinamis, yang memungkinkan Anda untuk menautkan ke peta pesan objek lain pada waktu proses. Untuk menerapkan penautan dinamis, Anda harus memperoleh kelas Anda dari CDynamicChain. Kemudian deklarasikan makro CHAIN_MSG_MAP_DYNAMIC di peta pesan Anda. CHAIN_MSG_MAP_DYNAMIC memerlukan nomor unik yang mengidentifikasi objek dan peta pesan yang Anda rantai. Anda harus menentukan nilai unik ini melalui panggilan ke CDynamicChain::SetChainEntry
.
Anda dapat menautkan ke kelas apa pun yang mendeklarasikan peta pesan, asalkan kelas berasal dari CMessageMap. CMessageMap
memungkinkan objek untuk mengekspos peta pesannya ke objek lain. Perhatikan bahwa CWindowImpl
sudah berasal dari CMessageMap
.
Peta Pesan Alternatif
Terakhir, ATL mendukung peta pesan alternatif, dideklarasikan dengan makro ALT_MSG_MAP . Setiap peta pesan alternatif diidentifikasi oleh angka unik, yang Anda teruskan ke ALT_MSG_MAP. Dengan menggunakan peta pesan alternatif, Anda dapat menangani pesan dari beberapa jendela dalam satu peta. Perhatikan bahwa secara default, CWindowImpl
tidak menggunakan peta pesan alternatif. Untuk menambahkan dukungan ini, ambil alih WindowProc
metode di kelas turunan Anda CWindowImpl
dan panggil ProcessWindowMessage
dengan pengidentifikasi peta pesan.