c++ - X11/Xlib : Create "GlassPane"-Window

标签 c++ x11 xlib glasspane

我尝试使用 C++ 和 X11 创建一个完全透明的窗口。它不应消耗任何事件,而只是将它们转发到下面的窗口。某种以 Java-Windows 闻名的 GlassPane,但它是全屏的。然后我想在这个窗口上画画。

X11 是否有可能做到这一点?

我的第一次尝试是忽略所有事件,只需使用 XGetImage() 从根窗口复制图像...但首先,这非常慢,因为窗口需要填满屏幕。不幸的是,XShmGetImage 不是这里的一个选项。

当然,这个窗口不需要任何装饰,但这不是什么大问题。

仅使用 X11/Xlib 如何做到这一点?如果不可能,我还需要什么?

感谢任何帮助!

PS:XineramaCompiz 都已激活,如果这带来问题,我可以停用它们。

最佳答案

您可以通过将其输入形状设置为空来创建一个仅输出窗口。

API 是 XFixesSetWindowShapeRegion(),您可以将 ShapeInputShapeBounding 分开设置。 XFixesCreateRegion() 用于获取要传入的区域。

然后您需要一个 RGBA(带 alpha channel )视觉,这样您就可以在大部分窗口中绘制透明像素。

合成 窗口管理器是透明工作所必需的。

关于c++ - X11/Xlib : Create "GlassPane"-Window,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4326534/

相关文章:

c++ - X11/Xlib c/c++ 字符到 XKeyEvent 键码

c++ - 伪析构函数调用不会破坏对象

c++ - 无法进入类方法gdb

c - C 中的 Xview 内存缓冲区

linux - 将程序的执行传递给另一个窗口管理器

x11 - 如何指定显示?

c - X11: 将像素值转换为 RGB

c - xlib半透明窗口背景

c++ - 无法正确使用 glDrawElements 进行绘制

c++ - 将 unsigned char > 255 转换为 int