Thứ Bảy, 8 tháng 2, 2014

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

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);
11
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)
12
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
13
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);
14
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

Không có nhận xét nào:

Đăng nhận xét