最初にディスプレイを開きます。開くという意味はXサーバに対し接続要求 を送り、受け入れられるのを待つという意味です。次にディスプレイからスク リーンを獲得し、次にそのスクリーンに子ウインドウとしていろいろなウイン ドウを開くことになります。ディスプレイとスクリーンが与えられると全体の 親ウインドウが決まります。一つのXサーバには複数のディスプレイが接続さ れうるし、それぞれのディスプレイが複数のスクリーンを持ちうるわけです。 それらが環境変数のDISPLAYではsakaya:0.0のように識別されます。sak ayaが サーバ名、次の0がディスプレイ、最後の0がスクリーンを指定します。通常は 一つのサーバ(ワークステーションやX端末)には一つのディスプレイと一つの スクリーンがあるのが普通です。
#include <X11/Xlib.h> Display *display; int screen; display = XOpenDisplay( "" ); screen = DefaultScreen( display );
さて、スクリーン上に表示される物はすべてウインドウとして扱われます。 そしてそれぞれのウインドウはある別のウインドウの中に表示されます。そし てその別のウインドウのことを親ウインドウと呼びます。すべてのウインドウ の親は(すべてのウインドウの後ろになる)背景だということになります。背景 のことをルートウインドウと呼びます。新規にアプリケーションでウインドウ を開く場合ルートウインドウの上に開くことになるわけです。Xウインドウプ ログラムの最初にすることはディスプレイとスクリーンを指定してルートウイ ンドウの情報を得、そこにウインドウを開くことです。そのウインドウを親と してたくさんのウインドウが開かれてゆきます。メニューやボタンなどもウイ ンドウの一種であるとしてあつかわれます。
Window window; window = XCreateSimpleWindow( display, RootWindow( display, screen ), 100, 50, 500, 400, 4, BlackPixel( display, screen ), WhitePixel( display, screen ) );
ただし、この状態ではまだウインドウは表示されません。データとしてウイン ドウが作られただけで、可視状態にはなっていません。可視状態にすることを マップするといいます。
XMapWindow( display, window );
この状態でもまだ表示されません。実はXサーバへのメッセージはバッファさ れていて適当なタイミングで送信されます。明示的にメッセージを送る場合、
XFlush( display );
これでサーバにウインドウの情報が送られ、指定した寸法の枠の大きさで表示 されます。必要がなくなったウインドウは破壊されなければなりません。表示 されなくてもリソースとしては使われたままになっているからです。
XDestroyWindow( display, window );
最後にサーバとの接続を閉じます。
XCloseDisplay( display );
これでウインドウが一瞬表示され、消えるプログラムが書けたことになります。