ID2D1HwndRenderTarget始终具有黑色背景而不是透明
ID2D1HwndRenderTarget always having black background instead of transparent
我正在尝试创建一个简单的透明窗口,我可以在其中使用 Direct2D 进行绘制。
到目前为止,我所做的:
- 已创建窗口
- 将样式设置为WS_EX_LAYERED
- 将 Alpha 颜色键设置为 #FFF
- 使用 Windows 图形绘制一个白色矩形
- 现在窗口是透明的,每像素的 alpha
- 然后在窗口外创建一个目标并使用 Direct2D 进行绘制
- 使阿尔法_PREMULIPLIED目标
- 清除 #FFF,0.0f alpha
- 窗口现在为黑色
我只是不知道如何使窗口透明。如果你能指出我的错误,我有义务
这里是如何使用 DirectComposition API 实现的
俄语: http://www.oszone.net/25395/
英语: https://msdn.microsoft.com/magazine/dn745861.aspx
基本上作者所做的是
-
设置扩展样式WS_EX_NOREDIRECTIONBITMAP以删除 DWM 的重定向位图。窗口的内容现在为空。
-
创建直接合成设备
-
创建组合交换链(而不是 hwnd 交换链)
-
将一个具有交换链的视觉对象作为内容作为根视觉对象。
-
使用 Direct2D API 渲染到 SwapChain 中。
它也适用于创建事件透明覆盖的WS_EX_TRANSPARENT | WS_EX_LAYERED | WS_EX_TOPMOST
。
我认为directX是不可能的。但是,GDI确实有效。
看看这里的源代码,看看它是如何完成的:http://pastebin.com/NJf8wi2V
在源代码中,您可以看到有一个尝试使用 directx/opengl 的选项。但是,正如您从运行中看到的那样,它们不起作用。
相关文章:
- 如何在全屏模式下(在OpenGL中)使背景透明
- SDL2 透明背景
- 调整HBITMAP的大小,同时保持透明背景
- 当我使用 DirectWrite 在 GDI hdc 上绘制文本时,如何设置透明背景
- 通过使用alpha混合opengl实现具有透明背景的纹理
- 如何使用 c++/WinAPI 绘制具有透明背景的文本
- OpenFrameworks中的透明背景窗口
- C++libPng 编写一个具有透明背景的 PNG
- QWebEngine页面中的透明背景
- SDL 纹理透明背景
- 使用C++/OpenCV或Matlab将图像的白色背景替换为透明背景
- 透明背景的C++按钮
- MFC显示具有透明背景的png
- 如何将SDL TTF表面转换为具有透明背景的GL纹理
- wxBitmap透明背景
- 如何在CBitmap上使用透明背景的CDC绘制文本
- 在c++ / OpenGL中显示无边框透明背景上的图像
- 使用WinAPI创建具有透明背景的文本标签
- SDL rendertextshade透明背景
- 如何在透明背景上绘制 PNG