我尝试使用 C++ 和 X11 创建一个完全透明的窗口。它不应消耗任何事件,而只是将它们转发到下面的窗口。某种以 Java-Windows 闻名的 GlassPane,但它是全屏的。然后我想在这个窗口上画画。
X11 是否有可能做到这一点?
我的第一次尝试是忽略所有事件,只需使用 XGetImage()
从根窗口复制图像...但首先,这非常慢,因为窗口需要填满屏幕。不幸的是,XShmGetImage
不是这里的一个选项。
当然,这个窗口不需要任何装饰,但这不是什么大问题。
仅使用 X11/Xlib 如何做到这一点?如果不可能,我还需要什么?
感谢任何帮助!
PS:Xinerama
和 Compiz
都已激活,如果这带来问题,我可以停用它们。
最佳答案
您可以通过将其输入形状设置为空来创建一个仅输出窗口。
API 是 XFixesSetWindowShapeRegion()
,您可以将 ShapeInput
与 ShapeBounding
分开设置。 XFixesCreateRegion()
用于获取要传入的区域。
然后您需要一个 RGBA(带 alpha channel )视觉,这样您就可以在大部分窗口中绘制透明像素。
合成 窗口管理器是透明工作所必需的。
关于c++ - X11/Xlib : Create "GlassPane"-Window,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4326534/