【问题标题】:override_redirect Xlib window attribute does nothingoverride_redirect Xlib 窗口属性什么都不做
【发布时间】:2020-08-02 14:19:45
【问题描述】:

我想为我的小游戏引擎创建一个不可调整大小的窗口。我发现将 override_redirect 属性设置为 true 正是我所需要的。所以我写了我的示例程序:

#include <X11/Xlib.h>
#include <unistd.h>

     Display *display;
     Window  window;
     Visual  *visual;
     XSetWindowAttributes attributes;
     int depth;
     int screen;
 
int main(){
     display = XOpenDisplay(NULL);
     screen = DefaultScreen(display);
     visual = DefaultVisual(display,screen);
     depth  = DefaultDepth(display,screen);
     attributes.background_pixel = XWhitePixel(display,screen);
     attributes.override_redirect = True;

     window = XCreateWindow( display,XRootWindow(display,screen),
                            200, 200, 350, 200, 5, depth,  InputOutput,
                            visual ,CWBackPixel, &attributes);
     XSelectInput(display,window,ExposureMask | KeyPressMask) ;
     XMapWindow(display, window);
     XFlush(display);
     sleep(10);

     return 0;
}

但是,我的窗口是可调整大小的,并且顶部有一个标题栏。我怎样才能摆脱这些,为什么这段代码不能按预期工作?

【问题讨论】:

    标签: c linux x11 xlib


    【解决方案1】:

    我怎样才能摆脱这些,为什么这段代码不能按预期工作?

    您忘记在位掩码中设置CWOverrideRedirect 位:

    CWBackPixel 表示考虑attributes 结构中的background_pixel 元素。

    如果同时考虑background_pixeloverride_redirect 这两个元素,则必须使用CWBackPixel|CWOverrideRedirect

     attributes.background_pixel = XWhitePixel(display,screen);
     attributes.override_redirect = True;
    
     window = XCreateWindow( display,XRootWindow(display,screen),
                            200, 200, 350, 200, 5, depth,  InputOutput,
                            visual, CWBackPixel|CWOverrideRedirect, &attributes);
    

    【讨论】:

      猜你喜欢
      • 2017-06-06
      • 1970-01-01
      • 2013-10-11
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多