Tải bản đầy đủ (.ppt) (41 trang)

bài giảng bàn phím, chuột và bộ định thời gian

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (231.68 KB, 41 trang )

Bài 5

Bàn phím, chuột và bộ định
thời gian

Mai Xuân Hùng

1


Bài 5

Bàn phím, chuột và bộ định
thời gian

Mai Xuân Hùng

2


Những thông điệp liên quan đến bàn phím




Khi thao tác nhấn phím được thực
hiện thì Windows phát sinh thông
điệp WM_KEYDOWN.
Khi nhả phím thì Windows sẽ phát
sinh thông điệp WM_KEYUP


• Trong đó, tham số wParam sẽ nhận giá trị
mã phím ảo, và tham số lParam chứa
thông tin chi tiết về phím được gõ vào
Mai Xuân Hùng

3


Các mã phím ảo cần nhớ







VK_DOWN : Mã phím mũi tên đi xuống
VK_UP: Mã phím mũi tên đi lên
VK_LEFT: Mã phím mũi tên qua trái
VK_RIGHT: Mã phím mũi tên qua phải
VK_ADD: Mã phím cộng
VK_SUBTRACT: Mã phím trừ

Mai Xuân Hùng

4


Ví dụ 1



Ví dụ 1: Xuất ký tự A ra màn hình, sau
đó dùng phím mũi tên đi lên, đi xuống và
qua lại để di chuyển ký tự A ở trên. Biết
rằng 1 bước dịch chuyển là 3 pixel. Lần
xuất đầu tiên ký tự nằm giữa cử sổ
chính

Mai Xuân Hùng

5


Giao diện chương trình

Mai Xuân Hùng

6


Coding


Khai báo trong hàm WndProc

• static int x,y;
• TCHAR str[2];

Mai Xuân Hùng


7


Coding (tt)
//xác định vị trí giữa màn hình
case WM_SIZE:
x=LOWORD(lParam)/2;
y=HIWORD(lParam)/2;
break;

Mai Xuân Hùng

8


Coding (tt)
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
strcpy(str,"A");
TextOut(hdc,x,y,str,1);
EndPaint(hWnd, &ps);
break;

Mai Xuân Hùng

9


Coding (tt)
case WM_KEYDOWN:

switch(wParam)
{
case VK_DOWN:
y+=3;
InvalidateRect(hWnd,NULL,TRUE);
break;
case VK_UP:
y-=3;
InvalidateRect(hWnd,NULL,TRUE);
break;

Mai Xuân Hùng

10


Coding (tt)
case VK_LEFT:
x-=3;
InvalidateRect(hWnd,NULL,TRUE);
break;
case VK_RIGHT:
x+=3;
InvalidateRect(hWnd,NULL,TRUE);
break;
}
break;

Mai Xuân Hùng


11


Ví dụ 2


Vẽ 1 hình tròn bán kính 5 pixel ra màn
hình sau đó dung phím +,- để phóng to và
thu nhỏ hình tròn trên. Biết rằng kích
thước R mỗi lần tăng hoặc giảm đi 3 pixel

Mai Xuân Hùng

12


Giao diện chương trình

Mai Xuân Hùng

13


Coding


Khai báo trong hàm WndProc

• static int R;
• static int x,y;


Mai Xuân Hùng

14


Coding (tt)
case WM_CREATE:
R=50;
break;
case WM_SIZE:
x=LOWORD(lParam)/2;
y=HIWORD(lParam)/2;
break;

Mai Xuân Hùng

15


Coding (tt)

case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
Ellipse(hdc,x-R,y-R,x+R,y+R);
EndPaint(hWnd, &ps);
break;

Mai Xuân Hùng


16


Lập trình xử lý thông điệp
case WM_KEYDOWN:
switch(wParam)
{
case VK_ADD:
R+=3;
InvalidateRect(hWnd,NULL,TRUE);
break;
case VK_SUBTRACT:
R-=3;
InvalidateRect(hWnd,NULL,TRUE);
break;
}
break;
Mai Xuân Hùng

17


Thông điệp liên quan đến chuột


WM_MOUSEMOVE: Phát sinh khi dịch chuyển
chuột trong vùng làm việc

Mai Xuân Hùng


18


Thông điệp liên quan đến chuột
Khi người dùng click chuột, tuỳ theo cách thao tác mà
chúng ta có các thông điệp sau:


Nút

Nhấn

Thả

Nhấn đúp

Trái

WM_LBUTTONDOWN

WM_LBUTTONUP

WM_LBUTTONDBLCLK

Giữa

WM_MBUTTONDOWN

WM_MBUTTONUP


WM_MBUTTONDBLCLK

Phải

WM_RBUTTONDOWN

WM_MBUTTONUP

WM_RBUTTONDBLCLK

Mai Xuân Hùng

19


Các bước tạo ứng dụng


Để nhận được thông điệp kích đôi thiết
bị chuột thủ tục MyRegisterClass cửa sổ
phải khai báo nhận thông điệp này như
sau:
wcex.style = CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;

Mai Xuân Hùng

20


Các thông số đi kèm







(LOWORD)lParam cho biết ví trí x của
chuột.
(HIWORD)lParam cho biết vị trí y của
chuột.
wParam: cho biết trạng thái của nút
nhấn, các trạng thái của nút nhấn như
sau:

Mai Xuân Hùng

21


Trạng thái của nút nhấn trên chuột
MK_LBUTTON

Nút chuột trái được nhấn

MK_MBUTTON

Nút chuột giữa nhấn

MK_RBUTTON


Nút chuột phảI nhấn

MK_SHIFT

Phím shift được nhấn

MK_CONTROL

Phím Control được nhấn

Mai Xuân Hùng

22


Ví dụ 1


In ví trí của chuột lên thanh tiêu đề của chương
trình khi chúng ta di chuyển chuột trên cửa sổ làm
việc.

Mai Xuân Hùng

23


Coding



Khai báo trong hàm WndProc

char str[100];
int x,y;


Viết lệnh trong thông điệp WM_MOUSEMOVE

case WM_MOUSEMOVE:
x=LOWORD(lParam);
y=HIWORD(lParam);
sprintf(str,"x=%d,y=%d",x,y);
SetWindowText(hWnd,str);
break;

Mai Xuân Hùng

24


Ví dụ 2
Vẽ hình tròn bán kính 50 pixel tại vị trí
chuột trái nhấn trên màn hình. Ví trí đầu
tiên hiển thị là giữa màn hình

Mai Xuân Hùng

25



×