gpt4 book ai didi

c++ - 如果我想关闭之前打开的窗口,则 X11-Window-ID 无效。 (C/C++)

转载 作者:行者123 更新时间:2023-11-30 18:02:12 24 4
gpt4 key购买 nike

我的 X11 有问题。我创建了一个普通窗口,当我单击一个按钮时,我想打开一个子窗口并使用 cairo 在其上绘制一些内容。

这就是我创建窗口的方式:

printf("createCairoSurface called\n");
printf("Window created: %i\n", (int)appWindow);
cairo_surface_t* new_surface = cairo_xlib_surface_create(display, appWindow, DefaultVisual(display, 0), width, height);

在这几行代码之前,我使用 XCreateWindow 创建一个普通窗口并更改一些属性,以便我的窗口像面板一样定位。

但是当我尝试使用以下代码关闭/销毁窗口时,应用程序崩溃并收到 BadWindow 错误。

Window window = (Window)static_cast(cairo_xlib_surface_get_drawable(surface));
printf("Tried to destroy window: %i\n", (int)window);
XDestroyWindow(display, window);
X Error of failed request:  BadWindow (invalid Window parameter)
Major opcode of failed request: 20 (X_GetProperty)
Resource id in failed request: 0x240000f
Serial number of failed request: 344
Current serial number in output stream: 344

即便如此,我添加的 printf 调用告诉我窗口 ID 应该有效:

Window created: 37748751
Tried to destroy window: 37748751

谢谢!

最佳答案

该错误与请求 X_GetProperty 有关,例如。 XGetProperty。

您的错误不是来自 XDestroyWindow() 调用,而是来自您的应用程序稍后使用该窗口。

关于c++ - 如果我想关闭之前打开的窗口,则 X11-Window-ID 无效。 (C/C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9380221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com