override_redirect Атрибут окна Xlib ничего не делает - PullRequest
0 голосов
/ 02 августа 2020

Я хочу создать окно неизменяемого размера для моего маленького игрового движка. Я обнаружил, что для атрибута 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;
}

Однако размер моего окна можно изменять, а вверху есть строка заголовка. Как мне от них избавиться и почему этот код не работает должным образом?

1 Ответ

2 голосов
/ 02 августа 2020

Как мне избавиться от них и почему этот код не работает должным образом?

Вы забыли установить бит CWOverrideRedirect в битовой маске:

CWBackPixel означает, что учитывается элемент background_pixel в структуре attributes.

Вы должны использовать CWBackPixel|CWOverrideRedirect, если должны учитываться оба элемента background_pixel и override_redirect:

 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);
...