override_redirect Xlib window 属性什么都不做

override_redirect Xlib window attribute does nothing

我想为我的小游戏引擎创建一个 non-resizable window。我发现 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;
}

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

How can I get rid of those and why doesn't this code work as intended?

您忘记设置位掩码中的 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);