Bài tập về Lập trình C trên Windows
lượt xem 39
download
Mô tả bài toán: – Nhấn chuột trái chọn điểm đầu – Thả chuột trái chọn điểm cuối – Khi có thay đổi thì vẽ lại ra màn hình
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài tập về Lập trình C trên Windows
- Lập trình C trên Windows Ví dụ và Bài tập Nguyễn Đức Hoàng Hạ Khoa CNTT – Trường ĐHKHTN Email: ndhha@fit.hcmuns.edu.vn 1
- WinMain • int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { //1. hInstanceàĐăng ký loại cửa sổ mới //2. Tạo một cửa sổàhWnd //3. Thực hiện vòng lập nhận và gửi xử lý thông điệp return 0; } 2
- RegisterClassEx WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = (WNDPROC)WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_BBBBB); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = (LPCSTR)IDC_BBBBB; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(hInstance,(LPCTSTR)IDI_SMALL); RegisterClassEx(&wcex); 3
- CreateWindow • hWnd = CreateWindow( szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, 100, 200, //trái - trên 500, 300, //rộng - cao NULL, // cửa sổ cha NULL, // menu hInstance, NULL ); • WS_OVERLAPPEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX 4
- DialogBox int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { DialogBox(hInstance, LPCTSTR(IDD_DIALOG1), NULL, DLGPROC(dlgProc) ); return 0; } 5
- Resource 6
- Resource 7
- Resource 8
- Resource 9
- WndProc-DlgProc • LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); • INT_PTR CALLBACK dlgProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); 10
- MOUSE • WM_LBUTTONDOWN - WM_LBUTTONUP - WM_LBUTTONDBLCLK • WM_RBUTTONDOWN - WM_RBUTTONUP - WM_RBUTTONDBLCLK • WM_MOUSEMOVE • wParam: ghi nhận các phím đặc biệt – MK_CONTROL – MK_SHIFT – MK_LBUTTON, MK_RBUTTON, MK_MBUTTON • lParam: – x = LOWORD(lParam) – Y = HIWORD(lParam) 11
- Ví dụ 1 Dùng chuột vẽ đoạn thẳng • Mô tả bài toán: – Nhấn chuột trái chọn điểm đầu – Nhấn chuột phải chọn điểm cuối – Khi có thay đổi thì vẽ lại ra màn hình • Yêu cầu: – Thiết kế dữ liệu – Viết mã giả xử lý cho các sự kiện sau: • WM_CREATE • WM_PAINT • WM_LBUTTONDOWN • WM_RBUTTONDOWN 12
- Ví dụ 1 • Dữ liệu: POINT P1, P2; • WM_CREATE: P1.x = P1.y = 0; P2.x = P2.y = 0; • WM_LBUTTONDOWN: P1.x = LOWORD(lParam); P1.y = HIWORD(lParam); • WM_RBUTTONDOWN: P2.x = LOWORD(lParam); P2.y = HIWORD(lParam); InvalidateRect(hWnd, NULL,TRUE); //Vẽ lại màn hình • WM_PAINT: MoveTo(hdc,P1.x, P1.y); LineTo(hdc,P2.x, P2.y); 13
- Bài tập 1 • Mô tả bài toán: – Nhấn chuột trái chọn điểm đầu – Thả chuột trái chọn điểm cuối – Khi có thay đổi thì vẽ lại ra màn hình • Yêu cầu: – Thiết kế dữ liệu – Viết mã giả xử lý cho các sự kiện sau: • WM_CREATE, WM_PAINT • WM_LBUTTONDOWN, WM_LBUTTONUP • WM_MOUSEMOVE 14
- TIMER • UINT_PTR SetTimer(HWND hWnd, UINT_PTR nID, UINT uElapse, //số nhịp TIMERPROC lpTimerFunc ); • WM_TIMER: wParam == nID • 1 giây = 1000 nhịp • Ví dụ: SetTimer(hWnd, 1, 500, NULL); • Khi không dùng nữa thì dùng lệnh KillTimer để hủy: KillTimer(hWnd, nID) • Thường lệnh SetTimer được đặt trong sự kiện WM_CREATE và KillTimer đặt trong sự kiện WM_DESTROY 15
- Ví dụ 2 Mô phỏng banh rơi • Mô tả bài toán: – Một quả banh rơi tự do từ độ cao H xuống nền rồi dội lên lại độ cao H. • Yêu cầu: – Thiết kế dữ liệu – Viết mã giả xử lý cho các sự kiện sau: • WM_CREATE, WM_DESTROY • WM_PAINT • WM_TIMER 16
- Ví dụ 2 • Dữ liệu: double h; //độ cao hiện tại double a = -5;//gia tốc double v, //vận tốc hiện tại double H=300; //độ cao tối đa int r=5; //bán kính int T = 50;//số nhịp dùng để đặt trong SetTimer • WM_PAINT x = 100; y = H+100-h; //đảo hệ tọa độ Ellipse(hdc,x-r,y-r, x+r,y+r); MoveToEx(hdc,0,H+100,NULL); LineTo(hdc,300,H+100); 17
- Ví dụ 2 case WM_TIMER: t = T / 1000.0; h = a*t*t + v*t + h; v = a*t + v; if (h
- Ví dụ 2 case WM_CREATE: v = 0;//vận tốc ban đầu h = H;//độ cao ban đầu SetTimer(hWnd,1,T,NULL); break; case WM_DESTROY: KillTimer(hWnd,1); PostQuitMessage(0); break; 19
- Bài tập 2 • Mô tả bài toán: V H • Yêu cầu: L – Thiết kế dữ liệu – Viết mã giả xử lý cho các sự kiện sau: • WM_CREATE , WM_DESTROY • WM_PAINT • WM_TIMER 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài tập kỹ thuật lập trình C++ Part 1
12 p | 625 | 220
-
Bài tập và lời giải Ngôn ngữ lập trình C
53 p | 934 | 196
-
Lý thuyết và bài tập ngôn ngữ lập trình C++
268 p | 1112 | 168
-
ngôn ngữ lập trình c và c++ (bài giảng, bài tập, lời giải mẫu)
287 p | 275 | 68
-
Bài tập học Lập trình C
76 p | 220 | 63
-
Bài tập Lập trình C++ - Lương Trần Hy Hiếu
24 p | 383 | 49
-
Kỹ thuật lập trình C/C++-Chương: Cơ bản về C++
23 p | 209 | 33
-
Bài tập Ngôn ngữ lập trình C (có lời giải)
53 p | 261 | 30
-
Lập trình C- Bài tập 16
1 p | 106 | 24
-
Viết chương trình kiểm tra tính nguyên tố của 1 số nguyên tố
2 p | 206 | 21
-
PHẦN 2: GIỚI THIỆU VỀ MỘT NGÔN NGỮ LẬP TRÌNH NGÔN NGỮ LẬP TRÌNH C
106 p | 145 | 19
-
Bài giảng Lập trình C nâng cao: Chương 5 - Trần Minh Thái
22 p | 144 | 18
-
Bài giảng Lập trình C nâng cao - Chương 5: Lập trình tập tin
11 p | 119 | 12
-
Bài giảng Ngôn ngữ lập trình C - Chương 9: Lập trình với tập tin
9 p | 115 | 10
-
Bài giảng Cơ sở lập trình Csharp: Bài 1 - Làm quen với ngôn ngữ lập trình C#
36 p | 142 | 9
-
Bài giảng Cơ sở lập trình: Ngôn ngữ lập trình C/C++ - Trịnh Tấn Đạt
142 p | 16 | 9
-
Bài giảng Ngôn ngữ lập trình C và C++ (Phần 2: Ngôn ngữ C++) - Chương 2: Giới thiệu về ngôn ngữ lập trình C++
49 p | 137 | 7
-
Bài giảng Kỹ thuật lập trình C: Chương 3 - ThS. Trần Quang Hải Bằng
9 p | 81 | 6
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn