X11/Xlib:创建"GlassPane"-Window

Atm*_*ons 5 c++ x11 xlib glasspane

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

X11在某种程度上可能吗?

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

当然,这个窗口不需要任何装饰,但这不是一个大问题.

如何仅使用X11/Xlib执行此操作?如果不可能,我还需要什么?

任何帮助表示赞赏!

PS:Xinerama被激活Compiz,如果这会带来问题,我可以将它们停用.

Hav*_*c P 5

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

API是XFixesSetWindowShapeRegion(),您可以ShapeInput单独设置ShapeBounding.XFixesCreateRegion()用于获取要传入的区域.

然后你需要一个RGBA(带有-α通道)视觉效果,这样你就可以在大部分窗口中绘制透明像素.

一个合成窗口管理器会为了透明度的工作需要.