2012-02-27 55 views
6

Tôi chưa bao giờ hiểu rõ lý do tại sao xóa nền có thông báo cửa sổ riêng biệt. Tôi trông hơi dư thừa đối với tôi. Khi tôi đã tạo các nút do chủ sở hữu vẽ, tôi đã luôn luôn xóa nền sau từ bên trong WM_PAINT. Đôi khi tôi đã thực hiện tất cả các bức tranh từ bên trong WM_ERASEBKGND và để trống WM_PAINT. Cả hai dường như làm việc tốt. Có lợi thế nào để tách bức tranh thành 2 hoạt động?Tại sao có một thông điệp riêng biệt cho WM_ERASEBKGND

+4

Như được giải thích dưới đây, đây là phần còn lại từ những ngày cũ. Đối với một ứng dụng hiện đại, bạn nên luôn trả về 1 (TRUE) để trả lời 'WM_ERASEBKGND' và thực hiện thao tác vẽ trong' WM_PAINT' (để tránh nhấp nháy). Nó cũng quan trọng để chỉ vẽ lên màn hình một lần để tránh nhấp nháy. Nếu bạn cần phải vẽ một cái gì đó ưa thích sử dụng bộ nhớ DC để vẽ đầu tiên. Cách tiện dụng để có được một [tại đây] (http://blogs.msdn.com/b/oldnewthing/archive/2011/05/20/10166505.aspx) – demorge

+0

@demorge, nếu 'WM_PAINT' được dự kiến ​​sẽ tự xóa , sau đó bạn phải trả về 'FALSE' từ' WM_ERASEBKGND'. – finnw

Trả lời

4

Điều này hoàn toàn đoán:

Quay lại những ngày cũ, điền hình chữ nhật có màu là hoạt động tương đối chậm. Nhưng làm đầy một hình chữ nhật lớn vẫn còn nhanh hơn rất nhiều so với điền vào rất nhiều hình chữ nhật nhỏ.

Tôi đoán rằng nếu bạn có cửa sổ có cửa sổ con và cả hai đều có cùng nền tảng đã đăng ký, thì Windows đủ thông minh để nhận ra nó không cần gửi WM_ERASEBKGND cho đứa trẻ khi nó đã bị xóa cha mẹ. Với một hộp thoại vừa phải phức tạp trên một máy tính rất chậm, điều này có thể là một cải tiến đáng kể.

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