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

时间:2012-02-21 15:28:56

标签: c++ c x11 cairo xlib

我遇到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-calls也告诉我窗口id应该是有效的:

Window created: 37748751
Tried to destroy window: 37748751

感谢的!

1 个答案:

答案 0 :(得分:0)

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

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