Lập trình C Windows
Trang 1Lậ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
Trang 4hInstance, NULL );
• WS_OVERLAPPEDWINDOW = WS_OVERLAPPED |
WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX
Trang 5DialogBox
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,LPSTR lpCmdLine,
int nCmdShow){
Trang 6Resource
Trang 7Resource
Trang 8Resource
Trang 9Resource
Trang 10WndProc-DlgProc
• LRESULT CALLBACK WndProc(
HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam);
• INT_PTR CALLBACK dlgProc(
HWND hwndDlg, UINT uMsg,
WPARAM wParam, LPARAM lParam);
Trang 11MOUSE
• WM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONDBLCLK
Trang 12Ví 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
Trang 13P2.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);
Trang 14Bà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
Trang 15TIMER
• 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
Trang 16Ví 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
Trang 17double v, //vận tốc hiện tại
double H=300; //độ cao tối đa
Trang 18break;
Trang 20L
Trang 22case ID_BTN2:
//Xử lý nhấn nút 2break;
}
return 1;
Trang 23Bài tập 3
• Thêm phím âm dương vào ví dụ 3
Trang 24• 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.
Trang 25MSDN
Trang 2626
Trang 27MFC là gì?