2008-11-29 109 views
5

我正在尝试创建一个自定义控件,用于显示每个像素alphablend的位图(就像其他一些人已经知道的那样)。创建自定义透明控件

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

在我使用的AlphaBlend画的每个像素的阿尔法混合位图控制的OnPaint中。

这工作得很好,但我有这样两个问题:

  • 我想改变显示位图,当鼠标在控制。由于控件是透明的,一个位图不会被另一个位图重叠的区域不会被擦除。图像更改后如何擦除背景?

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

也许我做错了什么或者我错了我如何实现我的控制。任何形式的帮助,将不胜感激。

感谢,

哈维尔

回答

1

我会把握机会。 :-)

这应该给你所有你需要来完成我想你想要的。

General Solution for Transparent Controls

至于Z顺序问题,z顺序不影响消息的优先级。您需要发布一些代码,以便我们确定发生了什么。