Lập trình C Windows 11_Ví dụ - bài tập

27 475 1
Tài liệu đã được kiểm tra trùng lặp
Lập trình C  Windows 11_Ví  dụ - bài tập

Đ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

Lập trình C Windows

Lập trình C Windows Ví dụ Bài tập Nguyễn Đức Hoàng Hạ Khoa CNTT – Trường ĐHKHTN Email: ndhha@fit.hcmuns.edu.vn WinMain • int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { //1 hInstanceàĐăng ký loại cửa sổ //2 Tạo cửa sổàhWnd //3 Thực vịng lập nhận gửi xử lý thơng điệp return 0; } 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); CreateWindow • hWnd = CreateWindow( szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, 100, 200, //trái - 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 DialogBox int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { DialogBox(hInstance, LPCTSTR(IDD_DIALOG1), NULL, DLGPROC(dlgProc) ); return 0; } Resource Resource Resource Resource 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 Ví dụ • 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 hình • WM_PAINT: MoveTo(hdc,P1.x, P1.y); LineTo(hdc,P2.x, P2.y); 13 Bài tập • Mơ tả tố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 vẽ lại hình • Yêu cầu: – Thiết kế liệu – Viết mã giả xử lý cho 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 • giây = 1000 nhịp • Ví dụ: SetTimer(hWnd, 1, 500, NULL); • Khi khơng dùng dùng lệnh KillTimer để hủy: KillTimer(hWnd, nID) • Thường lệnh SetTimer đặt kiện WM_CREATE KillTimer đặt kiện WM_DESTROY 15 Ví dụ Mơ banh rơi • Mơ tả toán: – Một banh rơi tự từ độ cao H xuống dội lên lại độ cao H • Yêu cầu: – Thiết kế liệu – Viết mã giả xử lý cho kiện sau: • WM_CREATE, WM_DESTROY • WM_PAINT • WM_TIMER 16 Ví dụ • Dữ liệu: double h; //độ cao double a = -5;//gia tốc double v, //vận tốc double H=300; //độ cao tối đa int r=5; //bán kính int T = 50;//số nhịp dùng để đặt 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ụ case WM_TIMER: t = T / 1000.0; h = a*t*t + v*t + h; v = a*t + v; if (h

Ngày đăng: 14/11/2012, 17:00

Tài liệu cùng người dùng

Tài liệu liên quan