BẮT SỰ KIỆN BÀN PHÍM TRONG C#

Giới thiệu phương pháp lập trình để giải pháp xử lý sự khiếu nại chuột cũng giống như bàn phím thông qua thư viện Borland Graphics Interface – BGI bằng C/C++.

Bạn đang xem: Bắt sự kiện bàn phím trong c#


*

*
*

Giới thiệu

Đối với những ứng dụng đồ họa như: vẽ, cách xử lý văn bản, cách xử trí bảng tính, … thì nhận, xử lý những sự kiện con chuột và bàn phím là rất buộc phải thiết. Nếu ứng dụng xử lý tốt các sự kiện này, giúp cho tất cả những người dùng áp dụng hết các tính năng nhưng ứng dụng cung cấp cũng như sinh sản sự luôn thể dụng, nhanh chóng, tăng năng suất khi làm cho việc.

Xử lý sự khiếu nại với thư viện BGI

Sự khiếu nại chuột

Thư viện BGI cung ứng sẵn một số phương thức để rất có thể thao tác với chuột và bàn phím. Đơn giản nhất như bộ đôi:

int mousex()int mousey()Cả hai cách thức này trả về tọa độ của con chuột trên khung cửa sổ ứng dụng tại thời khắc hàm này được gọi. Khi địa chỉ của loài chuột nằm kế bên khung ứng dụng thì câu hỏi gọi hàm này sẽ xảy ra 2 trường hợp:

Nếu chuột không từng dịch chuyển vào phạm vi hành lang cửa số ứng dụng - giá trị trả về là 0Nếu chuột đã từng có lần ở trong phạm vi hành lang cửa số ứng dụng cùng sau đó dịch chuyển ra ngoài, quý hiếm trả về là tọa độ lần sau cuối của loài chuột trong hành lang cửa số ứng dụng.

Đoạn lịch trình sau mô tả cách lấy tọa độ chuột dịch rời và in ra màn hình:

#include #include "graphics.h"#pragma comment(lib, "graphics.lib")int main() int gd = DETECT, gm; initgraph(&gd, &gm, ""); while (true) printf("Current mouse position: (%d, %d) ", mousex(), mousey()); getch(); closegraph(); return 0;Thư viện BGI nhận các loại sự kiện con chuột như:

WM_MOUSEMOVEWM_LBUTTONDBLCLKWM_LBUTTONDOWNWM_LBUTTONUPWM_MBUTTONDBLCLKWM_MBUTTONDOWNWM_MBUTTONUPWM_RBUTTONDBLCLKWM_RBUTTONDOWNWM_RBUTTONUP

Trong kia RBUTTON là con chuột phải, LBUTTON là loài chuột trái với MBUTTON là chuột giữa.

Các các loại sự kiện loài chuột ở trên sẽ giúp đỡ ta dễ dàng thao tác với các hàm sau:

ismouseclick

bool ismouseclick(int kind);Trả về true khi bao gồm sự kiện click xảy ra mà không được xử lý, trái lại là false.

Xem thêm: Hướng Dẫn Cách Làm Sao Để Xem Lượt Theo Dõi Trên Facebook Dễ Dàng Nhất

getmouseclick

void getmouseclick(int kind, int& x, int& y);
Gán x cùng y là quý hiếm tọa độ loài chuột tại thời khắc được click và ghi lại đã cách xử trí 1 sự khiếu nại click. Nếu tại thời khắc gọi hàm mà không hề sự khiếu nại click nào xảy ra thì quý giá của x cùng y là -1. Hàm này thường được sử dụng chung với hàm ismouseclick để giải pháp xử lý sự kiện 1 cách linh hoạt hơn.

Đoạn mã sau minh họa cách thực hiện của 2 hàm này:

#include #include "graphics.h"#pragma comment(lib, "graphics.lib")int main()int gd = DETECT, gm;initgraph(&gd, &gm, "");while (true)if (ismouseclick(WM_LBUTTONDOWN))int x, y;getmouseclick(WM_LBUTTONDOWN, x, y);printf("Current mouse position: (%d, %d) ", x, y);closegraph();return 0;clearmouseclickvoid clearmouseclick(int kind);Hủy các sự kiện con chuột tùy ở trong vào loại sự kiện được truyền vào tham số, sau thời điểm thực hiện kết thúc hàm này thì cực hiếm của ismouseclick sẽ tiến hành reset về false.

registermousehandler

Hầu hết các sự kiện con chuột đều có thể giải quyết bằng phương pháp sử dụng cặp đôi ismouseclick với getmouseclick. Trong khi còn hoàn toàn có thể nhận sự khiếu nại chuột trải qua việc đk hàm xử trí chuột với tủ sách qua hàm:

void registermousehandler(int kind, void h(int, int));Hàm này nhấn 2 tham số, tham số trước tiên là các loại sự khiếu nại (đã trình bày ở trên) cùng tham số sản phẩm hai là bé trỏ hàm mang đến hàm giải pháp xử lý sự kiện muốn muốn. Xét đoạn công tác sau:

#include #include "graphics.h"#pragma comment(lib, "graphics.lib")void mouseMoveHandler(int x, int y)printf("Current mouse position: (%d, %d) ", x, y);int main() int gd = DETECT, gm; initgraph(&gd, &gm, ""); registermousehandler(WM_MOUSEMOVE, mouseMoveHandler); getch(); closegraph(); return 0;Tạo hàm mouseMoveHandler, trọng trách của nó là thừa nhận sự khiếu nại chuột bao gồm tọa độ (x, y) và tiến hành xử lý sự kiện kia - ở đây chỉ đơn giản dễ dàng là in ra tọa độ. Và tại lời điện thoại tư vấn hàm registermousehandler triển khai đăng ký kết hàm mouseMoveHandler với thư viện. Như vậy mỗi một khi có sự kiện chuột di chuyển trên hành lang cửa số ứng dụng thì hàm mouseMoveHandler sẽ được gọi.

Có thể áp dụng giống như cho những sự kiện không giống như: WM_LBUTTONDBLCLK, WM_LBUTTONDOWN, WM_LBUTTONUP, ...

Sự kiện phím

Tương từ bỏ như với chuột, tủ sách BGI cung ứng các hàm sau để xử trí sự kiện phím:

getch

int getch();Trả về mã ASCII của cam kết tự vừa được nhấn, nếu có 1 ký tự quan trọng đặc biệt được nhất ví dụ như: HOME, UP, DOWN, … thì lần đầu tiên hàm getch() sẽ trả về cực hiếm 0. Lần thứ 2 sẽ trả về 1 trong những mã sau:

KEY_HOME KEY_UP KEY_PGUP KEY_LEFT KEY_CENTERKEY_RIGHT KEY_END KEY_DOWN KEY_PGDN KEY_INSERTKEY_DELETEKEY_F1 KEY_F2 KEY_F3 KEY_F4 KEY_F5 KEY_F6 KEY_F7 KEY_F8 KEY_F9kbhit

int kbhit();Kiểm tra coi tại thời gian gọi hàm gồm sự kiện phím nào không được xử lý không, trả về 0 không có sự khiếu nại nào xảy ra.

Đoạn công tác sau minh họa giải pháp lấy những sự kiện phím:

#include #include "graphics.h"#pragma comment(lib, "graphics.lib")int main() int gd = DETECT, gm; initgraph(&gd, &gm, ""); while (true) if (kbhit()) char key = getch(); if (!key) key = getch(); printf("# Special key pressed - Code: %d ", key); else printf("- Key "%c" is pressed ", key); closegraph(); return 0;