1. Trang chủ
  2. » Công Nghệ Thông Tin

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

Đ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

Xem thêm: Lập trình C Windows 11_Ví dụ - bài tập

TỪ KHÓA LIÊN QUAN

w