DirectDraw + цветен ключ на многослоен прозорец?

Създавам прозорец с WS_EX_LAYERED и задавам цветен ключ към него с помощта на SetLayeredWindowAttributes(). Мога да проверя дали този цветен ключ наистина създава прозрачен пластир в прозореца, като начертая прост правоъгълник, използвайки FillRect() вътре в прозореца. Това обаче не работи, когато рисувам в прозореца с помощта на DirectDraw. Създавам IDirectDrawSurface7 на прозореца и Blt() добавям няколко пиксела към него. някои от пикселите са оцветени с цветния ключ, но не ги виждам като прозрачни, те просто се появяват в цветния ключ.

Има ли нещо, присъщо на повърхността на DirectDraw, което е в конфликт с наслоената цветова манипулация на прозореца?
Когато задавам алфа стойност, използвайки SetLayeredWindowAttributes(), това изглежда работи добре с повърхността на DirectDraw и тя наистина изглежда полупрозрачна.


person shoosh    schedule 02.11.2014    source източник
comment
Малко старо, но може да си струва да погледнете: msdn.microsoft.com/en -us/magazine/ee819134.aspx   -  person TonyWilk    schedule 10.11.2014


Отговори (1)


Не знам дали сте виждали това, но този параграф от статията, публикувана по-долу, изглежда като това, което търсите.

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 books. Можете да го прочетете с някои примери за подробен код, намерени тук:

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=bg&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

Не знам дали това ще отговори на въпроса ви, но се надявам да помогне малко. наздраве

person Keith Enlow    schedule 07.11.2014
comment
Както споменах във въпроса, нямам проблем с използването на алфа смесване на този прозорец с DirectDraw. така че WS_EX_LAYERED работи на този прозорец, но не и цветовата манипулация. - person shoosh; 08.11.2014