X11プログラミング

Xウインドウシステムは、UNIXワークステーション上で動作するネットワーク指向の GUIを構築する為の基礎技術として提供されたシステムです。

Xウインドウシステムを学ぶ為に、実際にC言語を利用してプログラムを書いてみましょう。


●Xlibによるプログラミング

Xウインドウを構成しているソフトウェアは、サーバ上に存在するプログラム群とクライアント上で動作する プログラム群に大きく分けられます。

プログラムの開発にはライブラリが必要であり、XウインドウのC言語インターフェースは、Xlibと呼ばれて います。

ソースプログラムの先頭ではX11用のヘッダファイルを記述します。

#include <X11/Xlib.h>
#include <X11/Xutil.h>

main(){
  ...
  ...
}

ヘッダファイルの存在場所は、UNIX系OSならば

/usr/include/X11/Xlib.h
/usr/include/X11/X.h
/usr/include/X11/Xutil.h

Cygwinを利用されている人ならば

/usr/X11R6/include/X11/Xlib.h
/usr/X11R6/include/X11/X.h
/usr/X11R6/include/X11/Xutil.h

にあります。

●プログラムソース

ファイル名:hello.cxx

#include <X11/Xlib.h>
#include <X11/Xutil.h>

main(){

  Display *d;  // Display構造体
  Window  wr;  // ウインドウ識別子
  Font    f;   // フォント識別子
  GC      gc;  // GC識別子
  XEvent  event;  // XEvent構造体の宣言

  unsigned long black, white;

  d=XOpenDisplay(NULL);     // ディスプレイとの接続

  black=BlackPixel(d, 0);   // 黒色ピクセル値の取得
  white=WhitePixel(d, 0);   // 白色ピクセル値の取得

  wr=XCreateSimpleWindow(d, RootWindow(d, 0), // ウインドウ生成
			  50, 100,        //   位置:ルートウインドウ上の座標
			 340, 130,        // 大きさ:幅・高さ
			 1, black, white);//   枠幅:1・枠の色・ウインドウ本体の色

  XSelectInput(d, wr, ExposureMask);  // Exposeイベントを選択するイベントマスク

  XMapWindow(d, wr);      // ウインドウのwrマップ
  gc =XCreateGC(d, wr, 0, 0); // ウインドウに対するGCの生成要求
      
  while(1){  // 無限ループ
    XNextEvent(d, &event);  // イベントキューからのイベント抽出
    switch(event.type){     // イベントタイプのチェック
    case Expose :           // Expseイベントのとき描写

      f=XLoadFont(d, "variable"); // フォント名をロード
      XSetFont(d, gc,  f); // フォントをGCにロード
      
      XSetForeground(d, gc,  black); // 前景色に黒色設定  
      // 指定したフォント・座標(110,70)に文字列描画・文字数13
      XDrawString(d, wr, gc,  110, 70, "Hello World!!", 13);
      
      XFlush(d); // リクエストの強制送出
    }
  }
}

コンパイルするには次のように行います。(UNIX系OSの場合)

% c++ -o Hello hello.cxx -L/usr/X11R6/lib -lX11
% ./Hello

Cygwinの場合

% c++ -o Hello hello.cxx -I/usr/X11R6/include -L/usr/X11R6/lib -lX11
% ./Hello

実行結果を画面1に示します。

画面1 hello.cxx実行画面
画面1 hello.cxx実行画面

某V○++のS○Kより理解に苦しくないはずです。興味が湧いた人は参考書で勉強しましょう。


戻   る