ID2D1HwndRenderTarget始终具有黑色背景而不是透明

时间:2013-09-16 20:41:14

标签: c++ c user-interface mfc direct2d

我正在尝试创建一个简单的透明窗口,我可以使用Direct2D进行绘制。

到目前为止,我所做的一切:

  1. 创建窗口
  2. 将样式设置为WS_EX_LAYERED
  3. 将Alpha颜色键设置为#FFF
  4. 使用Windows Graphics绘制白色矩形
  5. 现在窗口是透明的,每像素alpha
  6. 然后在窗口外制作目标并使用Direct2D绘制
    • 制作ALPHA _PREMULIPLIED目标
    • 使用#FFF清除0.0f alpha
  7. 窗口现在是黑色的
  8. 我只是不知道如何使窗口变得透明。如果你能指出我的错误,我将被迫

2 个答案:

答案 0 :(得分:2)

我不认为使用directX是可能的。然而,GDI确实有效。

在这里查看来源,看看它是如何完成的:http://pastebin.com/NJf8wi2V

在源代码中,您可以看到有一个选项可以尝试使用directx / opengl。但是,正如您从跑步中看到的那样,它们无法正常工作。

答案 1 :(得分:2)

以下是如何使用DirectComposition API

实现的

俄语:http://www.oszone.net/25395/

英语:https://msdn.microsoft.com/magazine/dn745861.aspx

作者基本上做的是

  1. 设置WS_EX_NOREDIRECTIONBITMAP扩展样式以删除DWM的重定向位图。窗口内容现在为空。

  2. 创建DirectComposition设备

  3. 创建合成SwapChain(而非hwnd swapchain)

  4. 使用SwapChain将一个视觉效果作为内容显示为root visual。

  5. 使用Direct2D API渲染到SwapChain。

  6. 它也适用于WS_EX_TRANSPARENT | WS_EX_LAYERED | WS_EX_TOPMOST来创建事件透明叠加层。