在XWindow环境中创建一个全屏窗口有两个关键点,第一窗口左上角在(0, 0)并且和所在Screen等宽等高,第二,该窗口不需要窗口管理器的管理,即设置override_redirect属性为True;下面是一个例子:
#include
#include
int main()
{
Display *dpy;
int screen;
int blackColor, whiteColor;
Window win;
unsigned long winmask;
XSetWindowAttributes winattrs;
XEvent xevt;
int posx, posy, width, height;
dpy = XOpenDisplay(NULL);
screen = DefaultScreen(dpy);
blackColor = BlackPixel(dpy, DefaultScreen(dpy));
whiteColor = WhitePixel(dpy, DefaultScreen(dpy));
posx = posy = 0;
width = DisplayWidth(dpy, screen); /* 获取屏幕宽度 */
height = DisplayHeight(dpy, screen); /* 获取屏幕高度 */
win = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), posx, posy,
width, height, 0, blackColor, blackColor);
winattrs.override_redirect = True;
winmask = CWOverrideRedirect; /* 指定只对override_redirect属性做改变 */
XChangeWindowAttributes(dpy, win, winmask, &winattrs);
// We want to get MapNotify events
XSelectInput(dpy, win, StructureNotifyMask | ExposureMask);
XMapWindow(dpy, win);
while(1) {
XNextEvent(dpy, &xevt);
switch (xevt.type)
{
case Expose:
break;
default:
break;
}
}
return 0;
}
需要注意的是,由于窗口管理器的不同,该全屏窗口不一定能脱离窗口管理器的约束,但是大多数情况下该代码是有效的,窗口全屏化后,Alt-Tab等窗口切换动作无效。
此外,如果通过改变override_redirect属性为False并且将窗口大小改变得小于屏幕大小,得到的是没有框架的窗口,窗口框架在全屏化时被取消了。
阅读(874) | 评论(0) | 转发(0) |