我想创建一个具有透明度的顶级(IE,而不是WS_CHILD)窗口。但是,我不希望它是一个简单的面具,其中给定的像素是完全透明或完全不透明的。而且我不希望它如此,以至于整个窗口都具有一定的alpha级别。相反,我希望窗口本质上是完全透明的,并使用Alpha通道绘制了一个位图,以便将位图与后面的任何窗口混合在一起。图片,例如,朝阳,图像自己的阿尔法从不透明到完全透明的中心融合在一起。

我发现了两种方法都接近我想做的事情,但还不是完全。使用区域,我可以切出一个完全透明的部分。使用分层窗口,我也可以做类似的事情(甚至可以使整个窗口变得稍微透明,但这根本不是我想要的)。我已经研究了其他样式,例如WS_EX_TRANSPARENT和WS_EX_COMPOISE,但无济于事。

我可以得到这种效果,可以在子窗上正常工作,因为它们与父母窗户在父母的区域内融合在一起。让它在顶级窗户上类似地工作,继续躲避我。

我知道这可以做到,因为人们向我保证,他们在其他程序中看到了它。我觉得我只是不完全理解有关绘画窗户的简单知识。

有帮助吗?

解决方案

分层的窗户 (WS_EX_LAYERED)应该做这项工作,请记住您必须使用 UpdateLayeredWindow() 以及某种不寻常的位图格式(32位,预先绘制的alpha),以指定每个像素alpha值(SetLayeredWindowAttributes() 仅允许您为整个窗口或颜色键指定单个alpha值)。

您说您已经尝试了这个 - 您遇到了什么问题?

其他提示

我知道在窗口上获得每个像素alpha的唯一方法是UpdateLayeredWindow()。
查看此MSDN链接: http://msdn.microsoft.com/en-us/library/ms997507.aspx

请注意,当使用UpdateLayeredWindow时,应用程序不需要响应WM_PAINT或其他绘画消息,因为它已经为窗口提供了视觉表示形式,并且系统将负责存储该图像,构图并将其呈现在屏幕。 UpdateLayeredWindow非常强大,但是通常需要修改现有的Win32应用程序绘制的方式.

我敢打赌,这些是您遇到的问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top