LayeredWindows和变量alpha半透明 - 使用画笔?

时间:2013-01-10 01:15:22

标签: winapi gdi+ alphablending layered-windows

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

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

我的印象是,一旦我以这种方式拥有一个分层窗口,我可以使用不同级别的每像素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半透明度下绘制不同的元素,甚至只是矩形?

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

1 个答案:

答案 0 :(得分:1)

我不知道你在哪里认为SetLayeredWindowAttributes应该允许你直接将alpha数据绘制到你的窗口。从MSDN文档中,它似乎只允许持续的alpha或颜色键控。获取每像素alpha的唯一方法是使用UpdateLayeredWindow。