我想创建一个Linux应用程序 - 屏幕保护程序,在这种情况下 - 这被证明是显着很难找到制作窗口全屏简单的任务信息。即使现有屏保的代码也没有提及他们如何管理它,我还没有看到任何明显的功能,如XRemoveDecoration()
。X11/GLX - 全屏模式?
多摸索周围后,我还是设法创建一个窗口,这就是大小为桌面一样,用这样的:
Window win = DefaultRootWindow(disp);
XWindowAttributes getWinAttr;
XGetWindowAttributes(disp, win, &getWinAttr);
win = XCreateWindow(disp, win, 0, 0, getWinAttr.width, getWinAttr.height, 0, vInfo->depth, InputOutput, vInfo->visual, CWBorderPixel|CWColormap|CWEventMask|CWOverrideRedirect, &winAttr);
但是,这并不做任何事情来摆脱标题栏和边界。我知道有一种方法显然 - 但我还没有找到任何指向那个不依赖于其他大型图书馆被抛出顶部(现有的屏幕保护程序绝对不使用)的方向。
编辑:请不要从我的帖子删除信息。我有一个非常好的理由,我明确指出现有的屏幕保护程序没有使用可选的库,这是因为我过去大部分时间都在分析源代码。
我选择最直接地回答了这个问题的答案,并适用于一般应用。
如果你发现这个问题研究xscreensavers ......同样仍然适用。是的,xscreensaver有它自己的API--这很复杂,实际上涉及编写更多的代码行(是的,认真的)。如果你想在你的屏幕保护程序中使用OpenGL,则需要通过另一个 API(xlockmore,一个竞争系统)以及将其转换为xscreensaver的兼容层。
但是,xscreensaver能够运行任何程序,该程序可以使用虚拟根窗口(查看vroot.h)作为屏幕保护程序。所以我的建议是做到这一点 - 您将拥有更多的控制权,无限制的API和更高的可移植性。 (我看着一个例子甚至可以编译Linux或Windows,使用相同的文件!)
+1显然做了一些研究。 – Flexo 2012-01-30 14:48:51