Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 27 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
27
Dung lượng
619,94 KB
Nội dung
1 Lập trìnhCtrênWindows Ví dụvàBàitập Nguyễn Đức Hoàng Hạ Khoa CNTT –Trường ĐHKHTN Email: ndhha@fit.hcmuns.edu.vn 2 WinMain •intWinMain(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; } 3 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); 4 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 5 DialogBox int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { DialogBox(hInstance, LPCTSTR(IDD_DIALOG1), NULL, DLGPROC(dlgProc) ); return 0; } 6 Resource 7 Resource 8 Resource 9 Resource 10 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); [...]... toán: – Nhấn cc nút bằng chuột để nhập – Cho phép nhấn phím số trên bàn phím • Yêu c u: – Thiết kế dữ liệu – Viết mã giả xử lý cho cc sự kiện: • WM_INITDIALOG • WM_COMMAND • WM_CHAR 21 Vídụ 3 case WM_COMMAND: switch(LOWORD(wParam)) { case ID_BTN1: //Xử lý nhấn nút 1 break; case ID_BTN2: //Xử lý nhấn nút 2 break; } return 1; 22 Bàitập 3 • Thêm phím âm dương vào vídụ 3 23 Debug • • • • • Chạy từng... InvalidateRect(hWnd,NULL,TRUE); break; 18 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àitậ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 cc sự kiện sau: • WM_CREATE , WM_DESTROY • WM_PAINT • WM_TIMER 20 Vídụ 3 Máy tính bỏ túi • Mô tả bài toán:... WM_LBUTTONDBLCLK • WM_RBUTTONDOWN - WM_RBUTTONUP WM_RBUTTONDBLCLK • WM_MOUSEMOVE • wParam: ghi nhận cc 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... LineTo(hdc,P2.x, P2.y); 13 Bàitậ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 cc 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:... 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 cc sự kiện... Thêm phím âm dương vào vídụ 3 23 Debug • • • • • Chạy từng lệnh : F10 Chạy vào trong lệnh: F11 Đặt điểm dừng: F9 Chay chương trình ở chế độ debug: F5 Chạy chương trình không ở chế độ debug: Ctrl+F5 • Muốn debug ở sự kiện nào thì phải đặt điểm dừng ở sự kiện đó Không thể chạy từng lệnh (F10, F11) tới vị trí đó đưc 24 MSDN 25 26 MFC là gì? 27 ... 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:... giả xử lý cho cc 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, . wcex.lpfnWndProc = (WNDPROC)WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_BBBBB); wcex.hCursor. 1 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 2 WinMain •intWinMain(HINSTANCE