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_pixel
和 override_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);
我想为我的小游戏引擎创建一个 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_pixel
和 override_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);