2014-11-02 13 views
5

Ich erstelle ein Fenster mit WS_EX_LAYERED und setze einen Farbschlüssel mit SetLayeredWindowAttributes(). Ich kann überprüfen, dass dieser Farbschlüssel in der Tat einen transparenten Patch im Fenster erstellt, indem er eine einfache Rect mit FillRect() innerhalb des Fensters zeichnet. Dies funktioniert jedoch nicht, wenn ich mit DirectDraw in das Fenster zeichne. Ich erstelle eine IDirectDrawSurface7 auf dem Fenster und ich bin Blt() einige Pixel dazu. Einige der Pixel sind mit dem Farbschlüssel gefärbt, aber ich sehe sie nicht als transparent, sie erscheinen nur in der Farbtaste.DirectDraw + Layered Fenster Farbschlüssel?

Gibt es etwas, das in der DirectDraw-Oberfläche inhärent ist, das mit der Farbcodierung von Ebenenfenstern kollidiert?
Wenn ich einen Alpha-Wert unter Verwendung SetLayeredWindowAttributes() einstelle, scheinen das mit der DirectDraw-Oberfläche gut zu funktionieren, und es erscheint in der Tat durchscheinend.

+0

Ein bisschen alt, aber vielleicht einen Blick wert: http://msdn.microsoft.com/en-us/magazine/ee819134.aspx – TonyWilk

Antwort

2

Ich weiß nicht, ob Sie das gesehen haben, aber dieser Absatz aus dem Artikel unten sieht ein bisschen wie, was Sie suchen.

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.**

Ich denke sein, dass im letzten Satz, der das Problem hier ist. Die Quelle ist ein Teil eines Buches über Google-Bücher.

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

werde ich auch schließen die folgenden Links, die über ein wenig darüber reden, wenn auch nicht in fast die gleiche Menge an Details: Sie können hier mit einigen Code Detail Beispiele lesen

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

ich weiß nicht, ob dies Ihre Frage beantworten, aber ich hoffe, dass es ein wenig hilft. Prost.

+0

Wie ich in der Frage erwähnt habe, habe ich kein Problem mit Alpha-Blending auf diese Fenster mit DirectDraw. 'WS_EX_LAYERED' funktioniert also in diesem Fenster, nur nicht die Farbeingabe. – shoosh