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

Jendela induk dapat mengirim pesan ke tombol di jendela yang tumpang tindih atau turunan dengan menggunakan fungsi SendMessage, atau dapat mengirim pesan ke tombol dalam kotak dialog dengan menggunakan fungsi SendDlgItemMessage, CheckDlgButton, CheckRadioButton, dan 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.

Memanggil fungsi CheckDlgButton atau CheckRadioButton setara dengan mengirim pesan BM_SETCHECK. Memanggil fungsi IsDlgButtonChecked 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 fungsi GetSysColor, atau mengatur nilai dengan memanggil fungsi SetSysColors. Tabel berikut ini memperlihatkan nilai warna tombol default.

Value 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 ADALAH 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 pemrosesan WM_PAINT dan WM_ENABLE.
WM_GETDLGCODE Mengembalikan nilai yang menunjukkan jenis input yang diproses oleh prosedur tombol default, seperti yang diperlihatkan dalam tabel berikut.
Gaya tombol Kembali
BS_AUTOCHECKBOX DLGC_WANTCHARS | DLGC_BUTTON
BS_AUTORADIOBUTTON DLGC_RADIOBUTTON | DLGC_BUTTON
BS_CHECKBOX DLGC_WANTCHARS | DLGC_BUTTON
BS_DEFPUSHBUTTON DLGC_DEFPUSHBUTTON | DLGC_BUTTON
BS_GROUPBOX DLGC_STATIC
BS_PUSHBUTTON DLGC_UNDEFPUSHBUTTON | DLGC_BUTTON
BS_RADIOBUTTON DLGC_RADIOBUTTON | DLGC_BUTTON

 

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 fungsi DefWindowProc untuk pemrosesan default.

Mengontrol Pesan