1. Trang chủ
  2. » Công Nghệ Thông Tin

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

41 400 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 41
Dung lượng 206,5 KB

Nội dung

Bài Bàn phím, chuột định thời gian Mai Xuân Hùng Bài Bàn phím, chuột định thời gian Mai Xuân Hùng Những thông điệp liên quan đến bàn phím   Khi thao tác nhấn phím thực Windows phát sinh thông điệp WM_KEYDOWN Khi nhả phím Windows phát sinh thông điệp WM_KEYUP • Trong đó, tham số wParam nhận giá trị mã phím ảo, tham số lParam chứa thông tin chi tiết phím gõ vào Mai Xuân Hùng Các mã phím ảo cần nhớ       VK_DOWN : Mã phím mũi tên xuống VK_UP: Mã phím mũi tên 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 Ví dụ  Ví dụ 1: Xuất ký tự A hình, sau dùng phím mũi tên lên, xuống qua lại để di chuyển ký tự A Biết bước dịch chuyển pixel Lần xuất ký tự nằm cử sổ Mai Xuân Hùng Giao diện chương trình Mai Xuân Hùng Coding  Khai báo hàm WndProc • static int x,y; • TCHAR str[2]; Mai Xuân Hùng Coding (tt) //xác định vị trí hình case WM_SIZE: x=LOWORD(lParam)/2; y=HIWORD(lParam)/2; break; Mai Xuân Hùng 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 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 WM_LBUTTONDOWN: x=LOWORD(lParam); y=HIWORD(lParam); InvalidateRect(hWnd,NULL,TRUE); break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); Ellipse(hdc,x-50,y-50,x+50,y+50); EndPaint(hWnd, &ps); break; Mai Xuân Hùng 27 Ví dụ  Vẽ đường thẳng từ vị trí Click chuột trái ban đầu đến vị trí Click chuột trái cuối Mai Xuân Hùng 28 Coding  Khai báo biến hàm WndProc static POINT pFrom, pTo;  static int flag; Viết lệnh WM_CREATE case WM_CREATE: flag=0; break; Mai Xuân Hùng 29 Coding (tt) case WM_LBUTTONDOWN: if(flag==0) { pFrom.x=LOWORD(lParam); pFrom.y=HIWORD(lParam); flag=1; } else { hdc = GetDC(hWnd); pTo.x=LOWORD(lParam); pTo.y=HIWORD(lParam); MoveToEx(hdc,pFrom.x,pFrom.y,NULL); LineTo(hdc,pTo.x,pTo.y); flag=0; ReleaseDC(hWnd,hdc); } Mai Xuân Hùng break; 30 Ví dụ  Vẽ nét liền nhấn rê chuột trái vùng làm việc Mai Xuân Hùng 31 Coding static POINT pFrom, pTo; switch (message) { case WM_LBUTTONDOWN: pFrom.x=LOWORD(lParam); pFrom.y=HIWORD(lParam); break; Mai Xuân Hùng 32 Coding (tt) case WM_MOUSEMOVE: hdc=GetDC(hWnd); if((wParam&MK_LBUTTON)==MK_LBUTTON) { pTo.x=LOWORD(lParam); pTo.y=HIWORD(lParam); MoveToEx(hdc,pFrom.x,pFrom.y,NULL); LineTo(hdc,pTo.x,pTo.y); pFrom=pTo; } ReleaseDC(hWnd,hdc); break; Mai Xuân Hùng 33 Bộ định thời gian  Kích hoạt định thời gian : UINT_PTR SetTimer(HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc); • • •  uElapse(phần nghìn giây): Xác lập thời gian mà Windows se phát sinh thông điệp WM_TIMER nIDEvent: định danh định thời gian lpTimerFunc trỏ đến hàm xử lý thông điệp WM_TIMER phát sinh Nếu giá trị NULL Windows gởi thông điệp WM_TIMER vào hàng đợi thông điệp cửa sổ tương ứng Hủy định thời gian BOOL KillTimer(HWND hWnd, UINT_PTR nIDEvent); Mai Xuân Hùng 34 Ví dụ  Viết chương trình xuất hình đồng hồ điện tử gồm có :phút:giây hình Mai Xuân Hùng 35 Coding   Khai báo hàm WndProc SYSTEMTIME st; static char str[100]; Viết lệnh WM_CREATE case WM_CREATE: SetTimer(hWnd,IDT_T,1000,NULL); break; Mai Xuân Hùng 36 Coding (tt) case WM_TIMER: GetLocalTime(&st); sprintf(str,"%02d:%02d:%02d",st.wHour,st.wMinute,st.wSecond); InvalidateRect(hWnd,NULL,TRUE); break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); DrawText(hdc, str, strlen(str), &rt, DT_CENTER|DT_VCENTER| DT_SINGLELINE); EndPaint(hWnd, &ps); break; Mai Xuân Hùng 37 Ví dụ  Viết chương trình hiển thị vòng tròn có R=50 nằm giữ hình Cứ giây R tăng lên pixel, chặm biên giảm R, R ban đầu tăng R lên lại Mai Xuân Hùng 38 Coding  Khai báo biến hàm WndProc static int R,x,y,chieu;  case WM_CREATE: R=50; chieu=1; SetTimer(hWnd,IDT_T,10,NULL); break; case WM_SIZE: x=LOWORD(lParam)/2; y=HIWORD(lParam)/2; break;  Mai Xuân Hùng 39 Coding (tt) case WM_TIMER: if(chieu==1) { R+=2; if(y-R[...]... LineTo(hdc,pTo.x,pTo.y); pFrom=pTo; } ReleaseDC(hWnd,hdc); break; Mai Xuân Hùng 33 Bộ định thời gian  Kích hoạt bộ định thời gian : UINT_PTR SetTimer(HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc); • • •  uElapse(phần nghìn giây): Xác lập thời gian mà Windows se phát sinh thông điệp WM_TIMER nIDEvent: định danh của bộ định thời gian lpTimerFunc trỏ đến hàm sẽ xử lý khi thông điệp WM_TIMER phát... 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... nIDEvent: định danh của bộ định thời gian lpTimerFunc trỏ đến hàm sẽ xử lý khi thông điệp WM_TIMER phát sinh Nếu giá trị này là NULL thì Windows sẽ gởi thông điệp WM_TIMER vào hàng đợi thông điệp của cửa sổ tương ứng Hủy bộ định thời gian BOOL KillTimer(HWND hWnd, UINT_PTR nIDEvent); Mai Xuân Hùng 34 Ví dụ  Viết chương trình xuất ra màn hình đồng hồ điện tử gồm có giờ :phút:giây ra màn hình Mai Xuân... đô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... 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... InvalidateRect(hWnd,NULL,TRUE); break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); Ellipse(hdc,x-50,y-50,x+50,y+50); EndPaint(hWnd, &ps); break; Mai Xuân Hùng 27 Ví dụ 3  Vẽ đường thẳng từ vị trí Click chuột trái ban đầu đến vị trí Click chuột trái cuối Mai Xuân Hùng 28 Coding  Khai báo biến trong hàm WndProc static POINT pFrom, pTo;  static int flag; Viết lệnh trong WM_CREATE case WM_CREATE: flag=0; break; Mai Xuân... GetDC(hWnd); pTo.x=LOWORD(lParam); pTo.y=HIWORD(lParam); MoveToEx(hdc,pFrom.x,pFrom.y,NULL); LineTo(hdc,pTo.x,pTo.y); flag=0; ReleaseDC(hWnd,hdc); } Mai Xuân Hùng break; 30 Ví dụ 4  Vẽ nét liền khi nhấn và rê chuột trái trong vùng làm việc Mai Xuân Hùng 31 Coding static POINT pFrom, pTo; switch (message) { case WM_LBUTTONDOWN: pFrom.x=LOWORD(lParam); pFrom.y=HIWORD(lParam); break; Mai Xuân Hùng 32 Coding... 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... đ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 Coding   Khai báo static int x,y; Viết lệnh trong thông điệp WM_SIZE case WM_SIZE: x=LOWORD(lParam)/2; y=HIWORD(lParam)/2; ... Hùng 33 Bộ định thời gian  Kích hoạt định thời gian : UINT_PTR SetTimer(HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc); • • •  uElapse(phần nghìn giây): Xác lập thời gian mà.. .Bài Bàn phím, chuột định thời gian Mai Xuân Hùng Những thông điệp liên quan đến bàn phím   Khi thao tác nhấn phím thực Windows phát sinh... nIDEvent: định danh định thời gian lpTimerFunc trỏ đến hàm xử lý thông điệp WM_TIMER phát sinh Nếu giá trị NULL Windows gởi thông điệp WM_TIMER vào hàng đợi thông điệp cửa sổ tương ứng Hủy định thời gian

Ngày đăng: 20/01/2016, 17:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w