Bagikan melalui


Tanggapan pada Klik Mouse

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:

WM_LBUTTONDOWN
WM_LBUTTONUP
WM_LBUTTONDBLCLK
WM_LBUTTONUP

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

Gerakan Mouse