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