Ta nhận được hộp hội thoại Resource Symbols chứa danh sách các giá trị đã khai báo. Có thể thực hiện thêm, xóa các giá trị khai báo này.
Chọn mục New:
Nhập tên của giá trị khai báo trong hộp Name, nhập giá trị khai báo trong hộp Value. Sau đó chọn OK
Đóng hộp hội thoại Resource Symbol để kết thúc.
) Thông tin khai báo lưu trong tập tin resource.h của dự án. Khi đó, trong chương trình, thay vì viết giá trị hằng cụ thể cho số hiệu của Timer (chẳng hạn 100), ta sử dụng tên khai báo của nó (theo ví dụ là ID_TIMER). 5.4.2 WM_PAINT và hành vi OnPaint của CWnd:
Để duy trì thông tin hiển thị trên bề mặt cửa sổ, hệ thống thường xuyên gởi WM_PAINT đến cho cửa sổ mỗi khi có hiện tượng xâm phạm đến nội dung hiển thị của nó. Ứng dụng cũng có thể kích hoạt hệ thống phát sinh message này thông qua một trong các hành vi sau:
Xử lý Message 59
void Invalidate(BOOL bErase = TRUE ); Yêu cầu cập nhật toàn bộ vùng client của cửa sổ. Nếu tham số bErase = FALSE thì hệ thống sẽ không tự động xóa hộ phần nội dung cũ trong cửa sổ.
void InvalidateRect (
LPCRECT lpRect, // Con trỏ đến biến kiểu RECT chứa // thông tin vùng được cập nhật BOOL bErase = TRUE // Có ý nghĩa như Invalidate () ); Yêu cầu cập nhật một vùng giới hạn trong client của cửa sổ.
) Hành vi OnPaint của CWnd dùng xử lý WM_PAINT. Việc sử dụng hành vi này trong các lớp kế thừa CWnd nhằm thực hiện các trang trí riêng theo bố cục ở mục OnPaint trong (4.2). Toàn bộ thao tác xử lý này được MFC thực hiện thông qua lớp CPaintDC như sau:
CPaintDC dc(this); // Device context để vẽ lên ... // Thực hiện các tác vụ vẽ trên dc
THỰC HÀNH:
1. Tương tự VD04. Khi người dùng kết thúc ứng dụng, chương trình hiển thị hộp thông báo "Are you sure to exit this program ?" với hai mục YES-NO. Nếu người dùng chọn YES thì kết thúc:
HD: Cài đặt hành vi OnClose xử lý message WM_CLOSE cho CEmpWnd. Dùng hành vi MessageBox của CWnd để hiển thị câu thông báo. Nếu người dùng đồng ý thì thực hiện hành vi OnClose của CWnd để kết thúc, ngược lại không thực hiện xử lý gì cả (xem VD05)
2. Tương tự VD04 với phần demo là ảnh viên bi chạy trong client của cửa sổ. HD: Dùng timer để liên tục phát WM_PAINT bằng hành vi Invalidate theo mỗi chu kỳ. Hành vi OnPaint thực hiện vẽ vào vùng client của cửa sổ chính một dòng chữ có nội dung chạy kiểu bảng chữ điện tử. (xem VD06).
3. Thực hiện ứng dụng cho phép hiển thị một vật thể có hình dạng bất kỳ trong vùng client. Các phím ← , ↑ , → , ↓ cho phép dịch chuyển vật thể này. HD: Như bài tập 2 nhưng không sử dụng timer. Dùng hành vi OnKeyDown xử lý message WM_KEYDOWN. Hành vi này kiểm tra giá trị phím nhận được nChar với các giá trị hằng phím VK_LEFT (phím ←), VK_UP (phím ↑), VK_RIGHT (phím →), VK_DOWN (phím ↓) để thay đổi tọa độ vật thể cho phù hợp. Sau cùng phát sinh message WM_PAINT để vẽ lại vật thể.