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

Mat*_*ian 6 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. 窗口现在是黑色的

我只是不知道如何使窗口透明.如果你能指出我的错误,我将被迫

Ole*_*ilo 5

以下是如何使用 DirectComposition API 实现这一点

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

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

基本上作者所做的是

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

  2. 创建 DirectComposition 设备

  3. 创建组合交换链(而不是 hwnd 交换链)

  4. 将一个以 SwapChain 作为内容的视觉对象作为根视觉对象。

  5. 使用 Direct2D API 渲染到 SwapChain 中。

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


use*_*842 2

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

看一下这里的源代码,看看它是如何完成的:http://pastebin.com/NJf8wi2V

在源代码中,您可以看到有一个尝试使用 directx/opengl 的选项。然而,正如您从运行中看到的那样,它们不起作用。