【发布时间】:2013-01-10 10:00:49
【问题描述】:
我有一个分层窗口(使用 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),因为我正在使用设备上下文进行主动绘图。后一种方法需要一次性绘制并提供位图。 谢谢! 戴夫
【问题讨论】:
标签: winapi gdi+ alphablending layered-windows