Bagikan melalui


Menanggapi 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
WM_XBUTTONUP XBUTTON1 atau XBUTTON2

 

Ingat bahwa area klien adalah bagian dari jendela yang mengecualikan bingkai. Untuk informasi selengkapnya tentang area klien, lihat Apa itu Jendela?

Koordinat Mouse

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. 32 bit atas lParam tidak digunakan. Di mana dokumentasi Windows menyebutkan "kata urutan rendah" dan "kata urutan tinggi" lParam, kasus 64-bit berarti kata-kata dengan urutan rendah dan tinggi dari 32 bit yang lebih rendah. 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 ATAU bendera, menunjukkan status tombol mouse lainnya ditambah 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" dalam 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 menjadi pesan WM_LBUTTONDBLCLK. Pesan yang setara didefinisikan untuk tombol kanan, tengah, dan XBUTTON.

Hingga Anda mendapatkan pesan klik ganda, tidak ada cara untuk memberi tahu bahwa klik mouse pertama adalah awal 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 non-klien

Sekumpulan pesan terpisah didefinisikan untuk peristiwa mouse yang terjadi di dalam area non-klien jendela. Pesan-pesan ini memiliki huruf "NC" dalam nama. Misalnya, WM_NCLBUTTONDOWN setara dengan WM_LBUTTONDOWN non-klien. 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