免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1112 | 回复: 0
打印 上一主题 下一主题

创建XWindow全屏窗口 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-02 16:00 |只看该作者 |倒序浏览

               
在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并且将窗口大小改变得小于屏幕大小,得到的是没有框架的窗口,窗口框架在全屏化时被取消了。
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/3771/showart_1888842.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP