0

我有一个分层窗口(使用 SetLayeredWindowAttributes)。如果我将整个窗口的 alpha 设置为 128 并在其上绘制黑色矩形,它会按预期工作(黑色矩形以大约 50% 的不透明度显示)。

但是,如果我在整个窗口上设置 aplha(当我调用 SetLayeredWindowAttributes 为 255 时),然后用设置为 50% 的画笔绘制黑色矩形,它们黑色矩形是纯实心的,没有任何半透明性。

我的印象是,一旦我以这种方式创建了一个分层窗口,我就可以使用不同级别的每像素 Alpha 来绘制它,这样这两个窗口就会绘制两个不透明度级别:

User32.SetLayeredWindowAttributes(this.Handle, (uint) TransparentColorKey.ToArgb(), 255, User32.LWA_ALPHA | User32.LWA_COLORKEY);

e.Graphics.FillRectangle( new SolidBrush(Color.FromArgb(200, 40, 40, 40)), myRect);
e.Graphics.FillRectangle( new SolidBrush(Color.FromArgb( 25, 40, 40, 40)), myRect);

但是这两个矩形都具有相同的不透明度(我希望一个为 200,一个为 25)。我只能控制整个窗口的不透明度(SetLayeredWindowAttributes 中的 255)。

我在这里缺少什么,以便我可以以不同的 alpha 半透明度绘制不同的元素,甚至只是矩形?

顺便说一句,我想要 SetLayeredWindowAttributes(而不是 UpdateLayeredWindow),因为我正在使用设备上下文进行主动绘图。后一种方法需要一次性绘制并提供位图。谢谢!戴夫

4

1 回答 1

1

我不知道您从哪里得到 SetLayeredWindowAttributes 应该允许您将 alpha 数据直接绘制到您的窗口的想法。从 MSDN 文档看来,它似乎只允许恒定的 alpha 或颜色键控。获得每像素 alpha 的唯一方法是使用 UpdateLayeredWindow。

于 2013-01-10T02:00:49.500 回答