2010-02-02 14 views
6

tôi có nghi ngờ nhỏ liên quan đến các chức năng cửa sổ trong c + +. chính xác chức năng của "invalidate()" là gì? thông báo sẽ gửi gì? Khi chúng tôi cần gọi điều này? chức năng "update()" là gì? là "invalidaterect()" hoạt động tương tự như chức năng "invalidate()" ?.những gì là vô hiệu, phương pháp cập nhật làm trong VC++

Cảm ơn

Trả lời

6

CWnd::Invalidate() vô hiệu hóa toàn bộ khu vực khách hàng của cửa sổ, cho biết khu vực đã lỗi thời và phải được sơn lại. Bạn thường sẽ gọi điều này trên một điều khiển cần được vẽ lại. CWnd::InvalidateRect() chỉ làm mất hiệu lực một phần của cửa sổ.

Với chức năng Invalidate, thông báo WM_PAINT sẽ được đăng [không đúng; xem các ý kiến ​​] đến hàng đợi tin nhắn và xử lý tại một số thời điểm trong tương lai. CWnd::UpdateWindow() gửi (trái với bài viết) một tin nhắn WM_PAINT, khiến các vùng bị vô hiệu hóa được vẽ lại ngay lập tức.

Thực sự, đây là tất cả trong tài liệu.

+0

ý bạn là, chúng tôi không nên gọi "Không hợp lệ" hoặc "CWnd :: UpdateWindow()" tại một ví dụ trong ứng dụng đúng không? chúng tôi cần gọi một trong hai quyền để nhận tin nhắn wm_paint – Naruto

+3

Thật vậy. Gọi cả hai là không cần thiết. Bạn thường sẽ gọi 'UpdateWindow' chỉ khi cùng một luồng sẽ thực hiện một số tính toán dài sau đó, vì vậy nó sẽ không quay trở lại vòng lặp tin nhắn của nó sớm đủ. Trong trường hợp đó, bạn muốn sơn lại ngay lập tức, không đợi đến thời điểm thuận tiện hơn. Nhưng nói chung, sử dụng 'Invalidate'. – Thomas

+0

oh ok Cảm ơn u .. – Naruto

1

Hàm vô hiệu đánh dấu khu vực vẽ là không hợp lệ. Cờ này được sử dụng khi cửa sổ được vẽ lại, nếu khu vực bị vô hiệu hóa, nó sẽ vẽ lại khu vực, nếu không nó sẽ chỉ rời khỏi khu vực màn hình. invalidate vô hiệu hóa toàn bộ khu vực máy khách của một đối tượng đã cho, invalidaterect sẽ vô hiệu hóa một vùng cụ thể của vùng máy khách. Chức năng cập nhật hiện vẽ lại thực tế.

Lý do cho cơ chế như vậy và không chỉ vẽ ngay khi bạn biết điều gì đó phải thay đổi là bạn có thể ngăn nhiều lần vẽ lại, ví dụ: bạn nhận được ba tin nhắn keydown trong một lần, cuộn một số vùng văn bản. Nếu bạn đã vẽ lại vùng văn bản cho mỗi lần nhấn phím, bạn sẽ phải vẽ vùng văn bản ba lần và ứng dụng sẽ không phản hồi. Thay vì xử lý tất cả các sự kiện quan trọng, cập nhật cấu trúc dữ liệu gắn với vùng văn bản và làm mất hiệu lực vùng văn bản trước khi bạn vẽ lại văn bản, bạn chỉ vẽ lại vùng văn bản một lần.

Các vấn đề liên quan