2014-11-02 64 views
5

我使用SetLayeredWindowAttributes()WS_EX_LAYERED创建了一个窗口并为其设置了一个颜色键。我可以通过在窗口中使用FillRect()绘制一个简单的矩形来验证这个颜色键是否在窗口中创建了一个透明的补丁。但是,当我使用DirectDraw在窗口中绘制时,这不起作用。我在窗口上创建了一个IDirectDrawSurface7,我为其中一些像素创建了Blt()。一些像素用颜色键着色,但我不认为它们是透明的,它们只出现在颜色键中。DirectDraw +分层窗口颜色键?

DirectDraw表面中是否存在与分层窗口颜色键控相冲突的内容?
当我使用SetLayeredWindowAttributes()设置alpha值时,它似乎与DirectDraw表面一起工作良好,并且确实看起来是半透明的。

+0

有点旧,但可能值得一看:http://msdn.microsoft.com/en-us/magazine/ee819134.aspx – TonyWilk 2014-11-10 18:41:15

回答

2

我不知道你是否看到过这篇文章,但下面发表的文章中的这段文字看起来有点像你正在寻找的东西。

The hWnd is the window handle of a window with a WS_EX_LAYERED style flag. The dwFlags parameter can have one or both of LWA_COLORKEY and LWA_ALPHA. If a LWA_COLORKEY flag is used, the crKey parameter is the transparent color key. If a LWA_ALPHA flag is used, the bAlpha parameter is the constat source alpha value. **Only top-level windows can be layered windows.**

我认为它最后那句话,这里就是问题所在。源代码是Google书籍的一部分。你可以在这里找到了一些代码实例详细阅读:

http://books.google.com/books?id=-O92IIF1Bj4C&pg=PA720&lpg=PA720&dq=WS_EX_LAYERED+%2B+DirectDraw+color+key&source=bl&ots=SyWKE3aimb&sig=DXbshrEk2tN17h7CtWdMmAkHlAo&hl=en&sa=X&ei=7_JcVKSyFMukNrumgMgB&ved=0CCkQ6AEwAg#v=onepage&q=WS_EX_LAYERED%20%2B%20DirectDraw%20color%20key&f=false

我会还包括谈一点关于它下面的链接,虽然不是在几乎相同数量的细节:

http://web.cs.wpi.edu/~matt/courses/cs563/talks/cbyrd/pres3.html

http://msdn.microsoft.com/en-us/library/windows/hardware/ff567254(v=vs.85).aspx

我不知道这是否会回答你的问题,但我希望它有助于一点点。干杯。

+0

正如我在问题中提到的,我没有问题在这个alpha混合窗口与DirectDraw。所以'WS_EX_LAYERED'在这个窗口上工作,而不是颜色键控。 – shoosh 2014-11-08 19:45:48