我正在尝试创建一个 Linux 应用程序——这里是一个屏幕保护程序——但是发现很难找到有关如何将窗口全屏的简单任务的信息,即使是现有屏幕保护程序的代码也没有提到它们是如何管理的,我还没有看到任何像 XRemoveDecoration()
这样明显的函数。
在摸索了很多后,我使用了以下代码成功创建了与桌面相同大小的窗口:
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,使用相同的文件!)