1

我试图在主窗口内的 xcb 中显示一个窗口,但实际上没有运气。

这个想法是,当用户按下一个按钮(在这种情况下是 X 按钮)时,会显示一个小的白色窗口(仅用于测试)。

但实际上我被困在这一步。我在这里观看了示例代码: http ://en.wikibooks.org/wiki/X_Window_Programming/XCB

并试图在我的应用程序中做同样的事情。

[编辑 28/10/2013 ]现在使用该代码我可以显示一个窗口,但是如果我尝试添加其他变量,例如 int i=0 或其他变量,则该窗口不会出现,并且没有引发暴露事件(所有引发的事件是 0 或 2(即使我在其他事件中添加变量)。知道吗?

这是 XCB_KEY_PRESS 事件处理程序代码: 编辑(使用新代码)

case XCB_KEY_PRESS:{
  xcb_key_press_event_t *kp = (xcb_key_press_event_t *)ev;
  if(kp->detail==53){
  printf("X pressed\n");
  uint32_t vals[2];
  mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;
  vals[0]=screen->white_pixel;
  vals[1]=XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_KEY_PRESS;
  win = xcb_generate_id(connection);
  xcb_create_window(
    connection,
    XCB_COPY_FROM_PARENT,
    win,
    root,
    80,80,
    150,150,
    10,
    XCB_WINDOW_CLASS_INPUT_OUTPUT,
    screen->root_visual,
    mask, values);

  mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES;
  vals[0]=screen->white_pixel;
  vals[1]=0;
  background=xcb_generate_id(connection);
  xcb_create_gc(connection, background, win, mask, vals);
  xcb_map_window(connection,win);
  xcb_flush(connection);
  printf("finished\n");
  }
  printf("KEY_PRESS - Pressed: %d\n", kp->detail);
}

root 是从 xcb_screen_t 变量获得的根窗口。

背景和胜利的定义如下:

xcb_window_t win;
xcb_gcontext_t background;

我什至添加了一个 XCB_EXPOSE 事件处理程序:

case XCB_EXPOSE:{
     printf("EXPOSE NEW WINDOW CREATED\n");
     xcb_poly_fill_rectangle(connection, win, background,1,&rectangle);
     xcb_flush(connection);
}

该代码有什么问题?我错过了什么?(我正在尝试开发一个非常基本的窗口管理器,只是为了好玩)

(我对该程序的想法是,当按下 x 时会显示一个输入框,您对如何执行此操作有任何建议吗?)

4

0 回答 0