ID2D1HwndRenderTarget always having black background instead of transparent

本小妞迷上赌 提交于 2019-12-01 17:50:02

问题


I am trying to create a simple transparent window where I can draw with Direct2D.

So far what I have done:

  1. Created window
  2. Set style to WS_EX_LAYERED
  3. Set alpha color key as #FFF
  4. Draw using Windows Graphics a white rectangle
  5. Now window is transparent with per-pixel alpha
  6. Then make a target out of the window and draw using Direct2D
    • Make ALPHA _PREMULIPLIED target
    • Clear with #FFF with 0.0f alpha
  7. Window is now black

I just don't know how to make window to transparent. If you can point out my mistake, I would be obliged


回答1:


I don't think it's possible with directX. However GDI does work.

Take a look at the source here to see how it's done: http://pastebin.com/NJf8wi2V

In the source you can see that there is an option to attempt to use directx/opengl. However as you can see from running they do not work.




回答2:


Here how it's achievable using DirectComposition API

Russian: http://www.oszone.net/25395/

English: https://msdn.microsoft.com/magazine/dn745861.aspx

Basically what author does is

  1. Sets WS_EX_NOREDIRECTIONBITMAP extended style to remove redirection bitmap of DWM. Content of window is now empty.

  2. Creates DirectComposition device

  3. Creates Composition SwapChain (and not hwnd swapchain)

  4. Places one visual with SwapChain as content as root visual.

  5. Renders into SwapChain using Direct2D API.

It also works well with WS_EX_TRANSPARENT | WS_EX_LAYERED | WS_EX_TOPMOST for creating event-transparent overlays.



来源:https://stackoverflow.com/questions/18836921/id2d1hwndrendertarget-always-having-black-background-instead-of-transparent

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!