メインウィンドウ内の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 を押すと入力ボックスが表示されるというものです。それを行う方法について何か提案はありますか?)