4

我想创建一个透明的顶级(即不是 WS_CHILD)窗口。但是,我不希望它是一个简单的蒙版,其中给定的像素要么是完全透明的,要么是完全不透明的。而且我不希望整个窗口都具有一定的 alpha 级别。相反,我希望窗口基本上是完全透明的,并使用 alpha 通道绘制位图,以便位图与它后面的任何窗口混合。比如说,一个朝阳,图像自身的 alpha 从中心向外从不透明混合到完全透明。

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

我可以让这种效果在子窗口上正常工作,因为它们在其父区域内与其父窗口混合。让它在顶级窗口中以类似方式工作仍然让我难以理解。

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

4

2 回答 2

2

分层窗口(WS_EX_LAYERED_ UpdateLayeredWindow()_SetLayeredWindowAttributes()对于整个窗口或颜色键)。

你说你已经尝试过了——你遇到了什么问题?

于 2009-02-16T23:14:54.010 回答
1

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

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

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

于 2009-02-17T00:54:53.317 回答