我试图在主窗口内的 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 时会显示一个输入框,您对如何执行此操作有任何建议吗?)