7

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

到目前为止我做了什么:

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

我只是不知道如何使窗口透明。如果您能指出我的错误,我将不胜感激

4

2 回答 2

4

这里是如何使用 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于创建事件透明覆盖。

于 2016-01-28T15:36:49.843 回答
2

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

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

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

于 2013-09-17T10:41:38.033 回答