2008-11-29 50 views
5

Tôi đang cố gắng tạo một điều khiển tùy chỉnh hiển thị bitmap với mỗi pixel có thể có (như một số bạn đã biết cho các câu hỏi khác).Tạo điều khiển trong suốt tùy chỉnh

Hiện tại tôi đang sử dụng một điều khiển tùy chỉnh trong trình chỉnh sửa tài nguyên và tôi đính kèm nó vào một lớp có nguồn gốc từ CWnd. Khi tôi đăng ký lớp tùy chỉnh của mình, tôi đặt hbrBackground của cấu trúc WNDCLASS thành NULL_BRUSH để đạt được độ trong suốt của điều khiển.

Trong OnPaint của điều khiển, tôi sử dụng AlphaBlend để vẽ bitmap bit pha trộn mỗi pixel.

này hoạt động khá tốt nhưng tôi có này hai vấn đề:

  • Tôi muốn thay đổi bitmap hiển thị khi chuột đã qua sự kiểm soát. Khi điều khiển được minh bạch, các khu vực mà một bitmap mà không bị chồng chéo bởi bitmap khác sẽ không bị xóa. Làm thế nào tôi có thể xóa nền khi hình ảnh được thay đổi?

  • Vấn đề thứ hai liên quan đến hai điều khiển chồng chéo. Kiểm soát của tôi được vẽ trên điều khiển khác có một gradient (trên thực tế là bên trong điều khiển khác). Vấn đề là nếu tôi đặt điều khiển của mình trước khi theo thứ tự z, các điều khiển khác chồng lên sự kiểm soát của tôi và điều khiển của tôi không được hiển thị. Nếu tôi đặt điều khiển khác trước khi theo thứ tự z tôi không thể nhận được thông báo bằng chuột trong tầm kiểm soát của mình.

Có thể tôi đang làm điều gì đó sai hoặc tôi sai về cách tôi cố gắng thực hiện kiểm soát của mình. Bất kỳ loại trợ giúp nào cũng sẽ được đánh giá cao.

Cảm ơn,

Javier

Trả lời

1

tôi sẽ mất một cơ hội. :-)

Điều này sẽ cung cấp cho bạn tất cả những gì bạn cần để hoàn thành những gì tôi nghĩ bạn muốn.

General Solution for Transparent Controls

Theo như các vấn đề Z-trật tự, z-trật tự không ảnh hưởng đến ưu tiên nhắn. Bạn sẽ cần phải đăng một số mã để chúng tôi có thể xác định những gì đang xảy ra ở đó.

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