LẬP TRÌNH WINDOWS - Ví dụ và Bài tập
Số trang: 27
Loại file: pdf
Dung lượng: 619.94 KB
Lượt xem: 13
Lượt tải: 0
Xem trước 3 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Tham khảo tài liệu lập trình windows - ví dụ và bài tập, công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
Nội dung trích xuất từ tài liệu:
LẬP TRÌNH WINDOWS - Ví dụ và Bài tậpLập trình C trên Windows Ví dụ và Bài tập Nguyễn Đức Hoàng HạKhoa CNTT – Trường ĐHKHTNEmail: 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 RegisterClassExWNDCLASSEX 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 DialogBoxint APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ DialogBox(hInstance, LPCTSTR(IDD_DIALOG1), NULL, DLGPROC(dlgProc) ); return 0;} 5Resource 6Resource 7Resource 8Resource 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; // ...
Nội dung trích xuất từ tài liệu:
LẬP TRÌNH WINDOWS - Ví dụ và Bài tậpLập trình C trên Windows Ví dụ và Bài tập Nguyễn Đức Hoàng HạKhoa CNTT – Trường ĐHKHTNEmail: 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 RegisterClassExWNDCLASSEX 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 DialogBoxint APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ DialogBox(hInstance, LPCTSTR(IDD_DIALOG1), NULL, DLGPROC(dlgProc) ); return 0;} 5Resource 6Resource 7Resource 8Resource 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; // ...
Tìm kiếm theo từ khóa liên quan:
bài tập lập trình windows lập trình windows c sharp ngôn ngữ C lập trình với CGợi ý tài liệu liên quan:
-
Bài tập lập trình Windows dùng C# - Bài thực hành
13 trang 164 0 0 -
bảo mật mạng các phương thức giả mạo địa chỉ IP fake IP
13 trang 155 0 0 -
Giáo trình Lập trình C căn bản - HanoiAptech Computer Education Center
136 trang 117 0 0 -
information technology outsourcing transactions process strategies and contracts 2nd ed phần 3
65 trang 104 0 0 -
Excel add in development in c and c phần 9
0 trang 102 0 0 -
Giáo trình Tin học đại cương: Phần 2 - Trần Đình Khang
118 trang 96 0 0 -
Giáo trình Lập trình Windows 1 - Trường CĐN Đà Lạt
117 trang 91 0 0 -
101 thuật toán chương trình C: Phần 2
130 trang 84 0 0 -
91 trang 82 0 0
-
Hướng dẫn lập trình OpenGL căn bản
33 trang 50 0 0