
_START_ARTICLE_
XCB
_START_SECTION_
例
_START_PARAGRAPH_
/* ウィンドウ内に四角形を描画する単純な XCB アプリケーション */_NEWLINE_ _NEWLINE_ #include <xcb/xcb.h>_NEWLINE_ #include <stdio.h>_NEWLINE_ #include <stdlib.h>_NEWLINE_ _NEWLINE_ int main()_NEWLINE_ {_NEWLINE_   xcb_connection_t    *c;_NEWLINE_   xcb_screen_t        *s;_NEWLINE_   xcb_window_t         w;_NEWLINE_   xcb_gcontext_t       g;_NEWLINE_   xcb_generic_event_t *e;_NEWLINE_   uint32_t             mask;_NEWLINE_   uint32_t             values[2];_NEWLINE_   int                  done = 0;_NEWLINE_   xcb_rectangle_t      r = { 20, 20, 60, 60 };_NEWLINE_ _NEWLINE_                        /* サーバとのコネクションをオープン */_NEWLINE_   c = xcb_connect(NULL,NULL);_NEWLINE_   if (xcb_connection_has_error(c)) {_NEWLINE_     printf("Cannot open display\n");_NEWLINE_     exit(1);_NEWLINE_   }_NEWLINE_                        /* 第一スクリーン取得 */_NEWLINE_   s = xcb_setup_roots_iterator( xcb_get_setup(c) ).data;_NEWLINE_ _NEWLINE_                        /* グラフィックスコンテキスト生成 */_NEWLINE_   g = xcb_generate_id(c);_NEWLINE_   w = s->root;_NEWLINE_   mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES;_NEWLINE_   values[0] = s->black_pixel;_NEWLINE_   values[1] = 0;_NEWLINE_   xcb_create_gc(c, g, w, mask, values);_NEWLINE_ _NEWLINE_                        /* ウィンドウ生成 */_NEWLINE_   w = xcb_generate_id(c);_NEWLINE_   mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;_NEWLINE_   values[0] = s->white_pixel;_NEWLINE_   values[1] = XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_KEY_PRESS;_NEWLINE_   xcb_create_window(c, s->root_depth, w, s->root,_NEWLINE_                   10, 10, 100, 100, 1,_NEWLINE_                   XCB_WINDOW_CLASS_INPUT_OUTPUT, s->root_visual,_NEWLINE_                   mask, values);_NEWLINE_ _NEWLINE_                        /* ウィンドウをマップ（表示）する */_NEWLINE_   xcb_map_window(c, w);_NEWLINE_   _NEWLINE_   xcb_flush(c);_NEWLINE_ _NEWLINE_                        /* イベントループ */_NEWLINE_   while (!done && (e = xcb_wait_for_event(c))) {_NEWLINE_     switch (e->response_type & ~0x80) {_NEWLINE_     case XCB_EXPOSE:    /* ウィンドウ描画/再描画 */_NEWLINE_       xcb_poly_fill_rectangle(c, w, g,  1, &r);_NEWLINE_       xcb_flush(c);_NEWLINE_       break;_NEWLINE_     case XCB_KEY_PRESS:  /* キー押下で exit */_NEWLINE_       done = 1;_NEWLINE_       break;_NEWLINE_     }_NEWLINE_     free(e);_NEWLINE_   }_NEWLINE_                        /* サーバとのコネクションをクローズ */_NEWLINE_   xcb_disconnect(c);_NEWLINE_ _NEWLINE_   return 0;_NEWLINE_ }_NEWLINE_XCB はこの例からも分かるとおり、Xlibにほぼ相当するものの、API の抽象化レベルは若干低い。
_START_SECTION_
プロトコルの記述
_START_PARAGRAPH_
XCB の作者はX11プロトコルを記述するプログラミング言語に中立であり、他のプログラミング言語とのバインディングを可能にする、専用のインターフェイス記述言語を XML で作った。libxcb 自身はコードジェネレーターと小さなC言語のユーティリティー関数からなる。_NEWLINE_例：_NEWLINE_<xcb header="bigreq" extension-xname="BIG-REQUESTS"_NEWLINE_    extension-name="BigRequests" extension-multiword="true"_NEWLINE_    major-version="0" minor-version="0">_NEWLINE__NEWLINE_  <request name="Enable" opcode="0">_NEWLINE_    <reply>_NEWLINE_      <pad bytes="1" />_NEWLINE_      <field type="CARD32" name="maximum_request_length" />_NEWLINE_    </reply>_NEWLINE_  </request></xcb>