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

ID2D1HwndRenderTarget always having black background instead of transparent

本文关键字:透明 背景 黑色 ID2D1HwndRenderTarget      更新时间:2023-10-16

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

到目前为止,我所做的:

  1. 已创建窗口
  2. 将样式设置为WS_EX_LAYERED
  3. 将 Alpha 颜色键设置为 #FFF
  4. 使用 Windows 图形绘制一个白色矩形
  5. 现在窗口是透明的,每像素的 alpha
  6. 然后在窗口外创建一个目标并使用 Direct2D 进行绘制
    • 使阿尔法_PREMULIPLIED目标
    • 清除 #FFF,0.0f alpha
  7. 窗口现在为黑色

我只是不知道如何使窗口透明。如果你能指出我的错误,我有义务

这里是如何使用 DirectComposition API 实现的

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

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

基本上作者所做的是

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

  2. 创建直接合成设备

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

  4. 将一个具有交换链的视觉对象作为内容作为根视觉对象。

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

它也适用于创建事件透明覆盖的WS_EX_TRANSPARENT | WS_EX_LAYERED | WS_EX_TOPMOST

我认为directX是不可能的。但是,GDI确实有效。

看看

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

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