我正试图在主窗口内的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时会显示一个输入框,你对这个怎么做有什么建议吗?)