Tôi muốn tắt màn hình hiển thị điều khiển cho một số bitmap để tôi có thể truy cập nhanh vào bitmap đó.Vô hiệu hóa thành bitmap riêng
Thật không may Control.DrawToBitmap
dường như rút toàn bộ quyền kiểm soát mà nó được gọi là bao gồm tất cả các điều khiển con của nó. Bên trong nó phát hành một tin nhắn WM_PRINT với DC tự cung cấp cho một bitmap. Bitmap tạm thời này sau đó được blitted vào Bitmap do người dùng cung cấp. Không thể chấp nhận đối với tôi, tôi muốn có bản cập nhật bitmap này khi cần thiết để hiệu suất của tôi đạt khi bitmap là cần thiết được giảm thiểu.
Trong trường hợp lý tưởng, tôi muốn biểu mẫu hoạt động như thể nó hiển thị trên màn hình (nhưng không thể). Điều đó có nghĩa là nếu một số Kiểm soát có thuộc tính Text
của nó thay đổi, biểu mẫu sẽ bị vô hiệu một phần. Việc nắm bắt các thông điệp/sự kiện có liên quan sau đó sẽ cho phép tôi chỉ định DC của riêng tôi cho biểu mẫu được vẽ trên hoặc chỉ đơn giản là BitBlt các biểu mẫu DC cho riêng tôi.
Một số hướng dẫn tôi luôn nhìn vào:
- Các
PaintEventArgs
tham số trongOnPaint
dường như để giữ một thành viên savedGraphicsState, có lẽ nó có thể được sử dụng để tìm ra những gì không yêu cầu hủy bỏ hiệu lực - Có các hình thức có thể nhìn thấy nhưng bên ngoài khu vực màn hình. Kiểm soát sau đó không nhận được sơn, mặc dù.
- thủ gọi RedrawWindow() trên cửa sổ, cùng câu chuyện
Tôi không hoàn toàn rõ ràng về lý do tại sao 'DrawToBitmap' (thông điệp' WM_PRINT') không thể chấp nhận cho việc sử dụng của bạn. Bạn có lo lắng về * hiệu suất *? Nó rất khó có khả năng vẽ vào một bitmap sẽ chậm hơn so với việc vẽ lên màn hình. –
Tôi cần một cơ chế đệm. DrawToBitmap vẽ toàn bộ điều khiển từ đầu, trong khi hệ thống vô hiệu hóa được sử dụng trên các cửa sổ bình thường sẽ chỉ cập nhật các khu vực thực sự thay đổi. –
@Frank, bạn có cân nhắc sử dụng Bitblt không? http://www.codeproject.com/KB/GDI-plus/Bitblt_wrapper_class.aspx –