创建自定义透明控件

Jav*_*dro 5 controls mfc transparency alphablending z-order

我正在尝试创建一个自定义控件,显示每像素alphablend的位图(正如你们中的一些人已经知道其他问题).

现在我在资源编辑器中使用自定义控件,并将其附加到从CWnd派生的类.当我注册我的自定义类时,我将WNDCLASS structe的hbrBackground设置为NULL_BRUSH以获得控件的透明度.

在控件的OnPaint中,我使用AlphaBlend绘制每像素alpha混合位图.

这很有效,但我有两个问题:

  • 我想在鼠标悬停在控件上时更改显示的位图.由于控件是透明的,因此不会擦除一个位图与另一个位图不重叠的区域.如何在图像更改时删除背景?

  • 第二个问题与两个重叠控制有关.我的控件被绘制在具有渐变的其他控件上(实际上是在其他控件内).问题是,如果我之前将控件放在z顺序中,则其他控件与我的控件重叠,并且不会显示我的控件.如果我之前将其他控件放在z顺序中,则无法在我的控件中获取鼠标消息.

也许我做错了什么,或者我错误地想要实现我的控制.任何形式的帮助将不胜感激.

谢谢,

哈维尔

Jus*_*Boo 1

我会抓住机会。:-)

这应该为您提供完成我认为您想要的事情所需的一切。

透明控制的通用解决方案

就 Z 顺序问题而言,z 顺序不会影响消息优先级。您需要发布一些代码,以便我们可以确定那里发生了什么。