Pesan Tombol
Tombol dapat mengirim pesan ke jendela induknya, dan jendela induk dapat mengirim pesan ke tombol.
Topik berikut dibahas di bagian ini.
- Mengirim Pesan ke Tombol
- Menangani Pesan dari Tombol
- Pesan Pemberitahuan dari tombol
- Pesan Warna Tombol
- Pemrosesan Pesan Default Tombol
- Topik terkait
Mengirim Pesan ke Tombol
Jendela induk dapat mengirim pesan ke tombol di jendela yang tumpang tindih atau turunan dengan menggunakan fungsiSendMessage, atau dapat mengirim pesan ke tombol dalam kotak dialog dengan menggunakanSendDlgItemMessage , CheckDlgButton, checkRadioButton, dan Fungsi IsDlgButtonChecked.
Aplikasi dapat menggunakan pesan BM_GETCHECK untuk mengambil status centang kotak centang atau tombol radio. Aplikasi juga dapat menggunakan pesan BM_GETSTATE untuk mengambil status tombol saat ini (status pemeriksaan, status push, dan status fokus). Untuk mendapatkan informasi tentang status tertentu, gunakan bitmask pada nilai status yang dikembalikan.
Pesan BM_SETCHECK mengatur status centang kotak centang atau tombol radio; pesan mengembalikan nol. Pesan BM_SETSTATE mengatur status pendorongan tombol; pesan ini juga mengembalikan nol. Pesan BM_SETSTYLE mengubah gaya tombol. Ini dirancang untuk mengubah gaya tombol dalam jenis (misalnya, mengubah kotak centang ke kotak centang otomatis). Ini tidak dirancang untuk mengubah antara jenis (misalnya, mengubah kotak centang ke tombol radio). Aplikasi tidak boleh mengubah tombol dari satu jenis ke jenis lainnya.
Tombol gaya BS_BITMAP atau BS_ICON menampilkan bitmap atau ikon alih-alih teks. Pesan BM_SETIMAGE mengaitkan handel ke bitmap atau ikon dengan tombol. Pesan BM_GETIMAGE mengambil handel ke bitmap atau ikon yang terkait dengan tombol.
Aplikasi juga dapat menggunakan pesan DM_GETDEFID untuk mengambil pengidentifikasi kontrol tombol dorong default dalam kotak dialog. Aplikasi dapat menggunakan pesan DM_SETDEFID untuk mengatur tombol dorong default untuk kotak dialog.
MemanggilCheckDlgButton atau fungsi CheckRadioButton setara dengan mengirim pesan BM_SETCHECK. Memanggil fungsiIsDlgButtonChecked setara dengan mengirim pesan BM_GETCHECK.
Menangani Pesan dari Tombol
Pemberitahuan dari tombol dikirim sebagai pesan WM_COMMAND atau WM_NOTIFY. Informasi tentang pesan mana yang digunakan dapat ditemukan di halaman referensi untuk setiap pemberitahuan.
Untuk informasi selengkapnya tentang cara menangani pesan, lihat Mengontrol Pesan. Lihat juga Tombol Pesan.
Pesan Pemberitahuan dari Tombol
Ketika pengguna mengklik tombol, statusnya berubah, dan tombol mengirim kode pemberitahuan, dalam bentuk pesan WM_COMMAND, ke jendela induknya. Misalnya, kontrol tombol push mengirimkan kode pemberitahuan BN_CLICKED setiap kali pengguna memilih tombol. Dalam semua kasus (kecuali untuk BCN_HOTITEMCHANGE), kata berurutan rendah dari parameter wParam berisi pengidentifikasi kontrol, kata urutan tinggi wParam berisi kode pemberitahuan, dan parameter lParam berisi handel jendela kontrol.
Respons pesan dan jendela induk bergantung pada jenis, gaya, dan status tombol saat ini. Berikut ini adalah kode pemberitahuan tombol yang harus dipantau dan diproses aplikasi.
Kode pemberitahuan | Deskripsi |
---|---|
BCN_HOTITEMCHANGE | Mouse memasuki atau meninggalkan area klien tombol. |
BN_CLICKED | Pengguna mengklik tombol. |
BN_DBLCLK atau BN_DOUBLECLICKED | Pengguna mengeklik dua kali tombol. |
BN_DISABLE | Tombol dinonaktifkan. |
BN_PUSHED atau BN_HILITE | Pengguna menekan tombol. |
BN_KILLFOCUS | Tombol kehilangan fokus keyboard. |
BN_PAINT | Tombol harus dicat. |
BN_SETFOCUS | Tombol mendapatkan fokus keyboard. |
BN_UNPUSHED atau BN_UNHILITE | Tombol tidak lagi didorong. |
Tombol mengirimkan kode pemberitahuan BN_DISABLE, BN_PUSHED, BN_KILLFOCUS, BN_PAINT, BN_SETFOCUS, dan BN_UNPUSHED hanya jika memiliki gaya BS_NOTIFY. BN_DBLCLK kode pemberitahuan dikirim secara otomatis untuk tombol BS_USERBUTTON, BS_RADIOBUTTON, dan BS_OWNERDRAW. Jenis tombol lain mengirim BN_DBLCLK hanya jika memiliki gaya BS_NOTIFY. Semua tombol mengirim kode pemberitahuan BN_CLICKED terlepas dari gaya tombolnya.
Untuk tombol otomatis, sistem mengubah status dorong dan mengecat tombol. Dalam hal ini, aplikasi biasanya hanya memproses kode pemberitahuan BN_CLICKED dan BN_DBLCLK. Untuk tombol yang tidak otomatis, aplikasi biasanya merespons kode pemberitahuan dengan mengirim pesan untuk mengubah status tombol. Untuk informasi tentang mengirim pesan ke tombol, lihat Mengirim Pesan ke Tombol.
Saat pengguna memilih tombol yang digambar pemilik, tombol mengirimkan jendela induknya pesan WM_DRAWITEM yang berisi pengidentifikasi kontrol yang akan digambar dan informasi tentang dimensi dan statusnya.
Pesan Warna Tombol
Sistem menyediakan nilai warna default untuk tombol. Aplikasi dapat mengambil nilai default untuk warna-warna ini dengan memanggil fungsiGetSysColor, atau mengatur nilai dengan memanggil fungsiSetSysColors. Tabel berikut ini memperlihatkan nilai warna tombol default.
Nilai | Elemen berwarna |
---|---|
COLOR_BTNFACE | Tombol wajah. |
COLOR_BTNHIGHLIGHT | Sorot area (tepi atas dan kiri) tombol. |
COLOR_BTNSHADOW | Area bayangan (tepi bawah dan kanan) tombol. |
COLOR_BTNTEXT | Teks reguler (nongray) dalam tombol. |
COLOR_GRAYTEXT | Teks yang dinonaktifkan (abu-abu) dalam tombol. Warna ini diatur ke 0 jika pengandar tampilan saat ini tidak mendukung warna abu-abu solid. |
COLOR_WINDOW | Latar belakang jendela. |
COLOR_WINDOWFRAME | Bingkai jendela. |
COLOR_WINDOWTEXT | Teks di jendela. |
Namun, memanggil SetSysColors memengaruhi semua aplikasi, jadi Anda tidak boleh memanggil fungsi ini untuk menyesuaikan tombol untuk aplikasi Anda.
Sistem mengirim pesan WM_CTLCOLORBTN ke jendela induk tombol sebelum menggambar tombol. Pesan ini berisi handel ke konteks perangkat tombol dan handel ke jendela anak. Jendela induk dapat menggunakan handel ini untuk mengubah teks tombol dan warna latar belakang. Namun, hanya tombol yang digambar pemilik yang merespons jendela induk yang memproses pesan.
Tombol Pemrosesan Pesan Default
Prosedur jendela untuk kelas jendela kontrol tombol yang telah ditentukan sebelumnya melakukan pemrosesan default untuk semua pesan yang tidak diproses oleh prosedur kontrol tombol. Saat prosedur kontrol tombol mengembalikan FALSE untuk pesan apa pun, prosedur jendela yang telah ditentukan sebelumnya memeriksa pesan dan melakukan tindakan default yang tercantum dalam tabel berikut.
Pesan | Tindakan default | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BM_CLICK | Mengirim tombol WM_LBUTTONDOWN dan pesan WM_LBUTTONUP, dan mengirim jendela induk kode pemberitahuan BN_CLICKED. | ||||||||||||||||
BM_GETCHECK | Mengembalikan status pemeriksaan tombol. | ||||||||||||||||
BM_GETIMAGE | Mengembalikan handel ke bitmap atau ikon yang terkait dengan tombol atau NULL jika tombol tidak memiliki bitmap atau ikon. | ||||||||||||||||
BM_GETSTATE | Mengembalikan status pemeriksaan saat ini, status dorong, dan status fokus tombol. | ||||||||||||||||
BM_SETCHECK | Mengatur status centang untuk semua gaya tombol radio dan kotak centang. Jika parameter wParam lebih besar dari nol untuk tombol radio, tombol diberikan gaya WS_TABSTOP. | ||||||||||||||||
BM_SETIMAGE | Mengaitkan bitmap atau handel ikon yang ditentukan dengan tombol dan mengembalikan handel ke bitmap atau ikon sebelumnya. | ||||||||||||||||
BM_SETSTATE | Mengatur status pendorongan tombol. Untuk tombol yang digambar pemilik, pesan WM_DRAWITEM dikirim ke jendela induk jika status tombol telah berubah. | ||||||||||||||||
BM_SETSTYLE | Mengatur gaya tombol. Jika kata berurutan rendah dari parameter lParam TRUE, tombol akan digambar ulang. | ||||||||||||||||
WM_CHAR | Mencentang kotak centang atau kotak centang otomatis saat pengguna menekan tombol plus (+) atau sama dengan (=). Menghapus kotak centang atau kotak centang otomatis saat pengguna menekan tombol minus (–). | ||||||||||||||||
WM_ENABLE | Mengecat tombol. | ||||||||||||||||
WM_ERASEBKGND | Menghapus latar belakang untuk tombol yang digambar pemilik. Latar belakang tombol lain dihapus sebagai bagian dari WM_PAINT dan pemrosesan WM_ENABLE. | ||||||||||||||||
WM_GETDLGCODE | Mengembalikan nilai yang menunjukkan jenis input yang diproses oleh prosedur tombol default, seperti yang diperlihatkan dalam tabel berikut.
|
||||||||||||||||
WM_GETFONT | Mengembalikan handel ke font saat ini. | ||||||||||||||||
WM_KEYDOWN | Menekan tombol jika pengguna menekan SPACEBAR. | ||||||||||||||||
WM_KEYUP | Melepaskan tangkapan mouse untuk semua kasus kecuali tombol TAB. | ||||||||||||||||
WM_KILLFOCUS | Menghapus persegi panjang fokus dari tombol. Untuk tombol tekan dan tombol dorong default, persegi panjang fokus tidak valid. Jika tombol memiliki tangkapan mouse, pengambilan dilepaskan, tombol tidak diklik, dan status pendorongan apa pun dihapus. | ||||||||||||||||
WM_LBUTTONDBLCLK | Mengirim kode pemberitahuan BN_DBLCLK ke jendela induk untuk tombol radio dan tombol yang digambar pemilik. Untuk tombol lain, klik ganda diproses sebagai pesan WM_LBUTTONDOWN. | ||||||||||||||||
WM_LBUTTONDOWN | Menyoroti tombol jika posisi kursor mouse berada dalam persegi panjang klien tombol. | ||||||||||||||||
WM_LBUTTONUP | Melepaskan tangkapan mouse jika tombol memiliki tangkapan mouse. | ||||||||||||||||
WM_MOUSEMOVE | Melakukan tindakan yang sama seperti WM_LBUTTONDOWN, jika tombol memiliki tangkapan mouse. Jika tidak, tidak ada tindakan yang dilakukan. | ||||||||||||||||
WM_NCCREATE | Mengubah tombol BS_OWNERDRAW apa pun menjadi tombol BS_PUSHBUTTON. | ||||||||||||||||
WM_NCHITTEST | Mengembalikan HTTRANSPARENT, jika kontrol tombol adalah kotak grup. | ||||||||||||||||
WM_PAINT | Gambar tombol sesuai dengan gaya dan status saat ini. | ||||||||||||||||
WM_SETFOCUS | Menggambar persegi panjang fokus pada tombol mendapatkan fokus. Untuk tombol radio dan tombol radio otomatis, jendela induk dikirim kode pemberitahuan BN_CLICKED. | ||||||||||||||||
WM_SETFONT | Mengatur font baru dan secara opsional memperbarui jendela. | ||||||||||||||||
WM_SETTEXT | Mengatur teks tombol. Dalam kasus kotak grup, pesan mengecat teks yang sudah ada sebelumnya sebelum mengecat ulang kotak grup dengan teks baru. | ||||||||||||||||
WM_SYSKEYUP | Melepaskan tangkapan mouse untuk semua kasus kecuali tombol TAB. |
Prosedur jendela yang telah ditentukan sebelumnya meneruskan semua pesan lain ke fungsiDefWindowProc untuk pemrosesan default.
Topik terkait