Lập trình C trên Windows - Ví dụ và Bài tập
lượt xem 108
download
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;
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Lập trình C trên Windows - Ví dụ và Bài tập
- 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
-
Lập trình C trên Windows: Kỹ thuật lập trình Visual C++ (MFC)
36 p | 1148 | 443
-
Lập trình C trên Windows Các khái niệm cơ bản
22 p | 554 | 207
-
Môn học Lập trình C trên Windows Bài tập thực hành
7 p | 832 | 187
-
Lập trình C trên Windows: Thư viện đồ họa GDI (Graphics Device Interface)
37 p | 606 | 114
-
Bài giảng lập trình C trên Windows
69 p | 247 | 89
-
Tổng quan lập trình C trên Windows
30 p | 258 | 77
-
Giáo trình Lập trình C trên Windows: Phần 1 - Nguyễn Đình Quyên, Mai Xuân Hùng (đồng biên soạn)
70 p | 189 | 65
-
CÁC QUI ĐỊNH - Môn học: Lập trình C trên Windows
1 p | 298 | 57
-
Giáo trình Lập trình C trên Windows: Phần 2 - Nguyễn Đình Quyên, Mai Xuân Hùng (đồng biên soạn)
73 p | 158 | 50
-
Lập trình C trên Windows - ĐH KHTN Tp.HCM
17 p | 207 | 39
-
Bài giảng Lập trình C trên Windows - Nguyễn Đạt Thông
353 p | 105 | 17
-
Lập trình C trên Windows Kỹ thuật lập trình Hook Nguyễn Tri Tuấn Khoa
12 p | 123 | 15
-
Bài giảng Lập trình trên Windows: Chương 3 - Trần Minh Thái
220 p | 89 | 14
-
Dẫn nhập lập trình C trên Windows
8 p | 127 | 11
-
Bài giảng Lập trình Windows - Chương 1: Tổng quan lập trình Windows (2016)
6 p | 151 | 8
-
Bài giảng Lập trình Windows - Chương 3: Lập trình C++ trên Windows (2016)
16 p | 74 | 8
-
Bài giảng Lập trình Windows: Chương 3 - Lập trình C ++ trên Windows
16 p | 85 | 7
-
Bài giảng Lập trình C trên Windows: Thư viện lập trình Multi-Media
7 p | 65 | 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