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.
Jika pengguna mengklik tombol mouse saat kursor berada di atas area klien jendela, jendela akan menerima salah satu pesan berikut.
Pesan | Makna |
---|---|
WM_LBUTTONDOWN | Tombol kiri ke bawah |
WM_LBUTTONUP | Tombol kiri ke atas |
WM_MBUTTONDOWN | Tombol tengah ke bawah |
WM_MBUTTONUP | Tombol tengah ke atas |
WM_RBUTTONDOWN | Tombol kanan ke bawah |
WM_RBUTTONUP | Tombol kanan atas |
WM_XBUTTONDOWN | XBUTTON1 atau XBUTTON2 ditekan |
WM_XBUTTONUP | XBUTTON1 atau XBUTTON2 dilepas |
Ingat bahwa area klien adalah bagian dari jendela yang mengecualikan bingkai. Untuk informasi selengkapnya tentang area klien, lihat Apa itu Jendela?
Koordinat Tetikus
Dalam semua pesan ini, parameter lParam berisi koordinat x dan y dari penunjuk mouse. 16 bit terendah lParam berisi koordinat x, dan 16 bit berikutnya berisi koordinat y. Gunakan makro GET_X_LPARAM dan GET_Y_LPARAM untuk membuka kemasan koordinat dari lParam.
int xPos = GET_X_LPARAM(lParam);
int yPos = GET_Y_LPARAM(lParam);
Makro ini didefinisikan dalam file header WindowsX.h.
Pada Windows 64-bit, lParam adalah nilai 64-bit. Bagian atas 32 bit dari lParam tidak digunakan. Di dalam dokumentasi Windows yang menyebutkan "kata urutan rendah" dan "kata urutan tinggi" dari lParam, dalam kasus 64-bit, ini merujuk pada kata urutan rendah dan urutan tinggi dari 32 bit bagian bawah. Makro mengekstrak nilai yang tepat, jadi jika Anda menggunakannya, Anda akan aman.
Koordinat mouse diberikan dalam piksel, bukan piksel independen perangkat (DIP), dan diukur relatif terhadap area klien jendela. Koordinat adalah nilai yang ditandatangani. Posisi di atas dan di sebelah kiri area klien memiliki koordinat negatif, yang penting jika Anda melacak posisi mouse di luar jendela. Kita akan melihat cara melakukannya dalam topik selanjutnya, Menangkap Gerakan Mouse di Luar Jendela.
Bendera Tambahan
Parameter wParam berisi bitwise OR dari bendera-bendera, menunjukkan status tombol-tombol mouse yang lain serta tombol SHIFT dan CTRL.
Bendera | Makna |
---|---|
MK_CONTROL | Tombol CTRL tidak berfungsi. |
MK_LBUTTON | Tombol mouse kiri tidak berfungsi. |
MK_MBUTTON | Tombol mouse tengah tidak berfungsi. |
MK_RBUTTON | Tombol kanan mouse tidak berfungsi. |
MK_SHIFT | Tombol SHIFT tidak berfungsi. |
MK_XBUTTON1 | Tombol XBUTTON1 tidak berfungsi. |
MK_XBUTTON2 | Tombol XBUTTON2 tidak berfungsi. |
Tidak adanya bendera berarti tombol atau tombol yang sesuai tidak ditekan. Misalnya, untuk menguji apakah tombol CTRL tidak berfungsi:
if (wParam & MK_CONTROL) { ...
Jika Anda perlu menemukan status tombol lain selain CTRL dan SHIFT, gunakan fungsi GetKeyState, yang dijelaskan dalam Input Keyboard.
Pesan jendela WM_XBUTTONDOWN dan WM_XBUTTONUP berlaku untuk XBUTTON1 dan XBUTTON2. Parameter wParam menunjukkan tombol mana yang diklik.
UINT button = GET_XBUTTON_WPARAM(wParam);
if (button == XBUTTON1)
{
// XBUTTON1 was clicked.
}
else if (button == XBUTTON2)
{
// XBUTTON2 was clicked.
}
Klik Ganda
Jendela tidak menerima pemberitahuan klik ganda secara default. Untuk menerima klik ganda, atur bendera CS_DBLCLKS di struktur WNDCLASS saat Anda mendaftarkan kelas jendela.
WNDCLASS wc = { };
wc.style = CS_DBLCLKS;
/* Set other structure members. */
RegisterClass(&wc);
Jika Anda mengatur bendera CS_DBLCLKS seperti yang ditunjukkan, jendela akan menerima pemberitahuan klik ganda. Klik ganda ditunjukkan oleh pesan jendela dengan "DBLCLK" pada nama. Misalnya, klik dua kali pada tombol mouse kiri menghasilkan urutan pesan berikut:
Akibatnya, pesan WM_LBUTTONDOWN kedua yang biasanya akan dihasilkan berubah menjadi pesan WM_LBUTTONDBLCLK. Pesan yang setara didefinisikan untuk tombol kanan, tengah, dan XBUTTON.
Hingga Anda mendapatkan pesan klik ganda, tidak mungkin mengetahui bahwa klik mouse pertama merupakan bagian dari klik ganda. Oleh karena itu, tindakan klik ganda harus melanjutkan tindakan yang dimulai dengan klik mouse pertama. Misalnya, di Windows Shell, satu klik memilih folder, sementara klik ganda membuka folder.
Pesan Mouse Program Bukan Klien
Sekumpulan pesan terpisah ditetapkan untuk peristiwa tetikus yang terjadi di dalam area jendela non-klien. Pesan-pesan ini memiliki huruf "NC" dalam nama. Misalnya, WM_NCLBUTTONDOWN adalah setara non-klien dari WM_LBUTTONDOWN. Aplikasi umum tidak akan mencegat pesan-pesan ini , karena fungsi DefWindowProc menangani pesan-pesan ini dengan benar. Namun, fungsi tersebut dapat berguna untuk fungsi lanjutan tertentu. Misalnya, Anda dapat menggunakan pesan ini untuk menerapkan perilaku kustom di bilah judul. Jika Anda menangani pesan-pesan ini, Anda umumnya harus meneruskannya ke DefWindowProc setelahnya. Jika tidak, aplikasi Anda akan merusak fungsionalitas standar seperti menyeret atau meminimalkan jendela.
Berikutnya