Index | Prev. Step | Next Step |
全てのウィンドウはルートウィンドウをトップとする階層(ツリー)構造を構成します。ルート以外の各ウィンドウはただ1つの親ウィンドウを持ちます。
親ウィンドウは子のウィンドウをクリップします。兄弟どうしはスタックオーダにより上下関係が決まります。
各ウィンドウは Window 型の ID によって識別されます。アプリケーション(クライアント)は普通、ルートの子としてウィンドウを生成するため、ルートウィンドウの ID が必要になります。
これらはマクロで、上はデフォルトスクリーンに対して使用します。
Window DefaultRootWindow (Display *display)
Window RootWindow (Display *display, int screen_number)色の指定はピクセル値(実際の色ではなく、パレットのようなもの)で指定します。詳しくはあとのほうで述べるので、ここでは黒と白のピクセル値を入手するマクロを示します。
ウィンドウは生成してもマップしない限りスクリーンには表示されません。
unsigned long BlackPixel (Display *display, int screen_number)
unsigned long WhitePixel (Display *display, int screen_number)
Window XCreateSimpleWindow (display, parent, x, y, width, height, border_width, border, background) Display *display Window parent int x, y unsigned int width, height, border_width unsigned long border, backgroundx, y
はウィンドウを生成する、親ウィンドウの枠の内側での位置を表します。
border, background
は枠とウィンドウ本体の色を指定するピクセル値を表します。
あるウィンドウが画面に表示されるためには、そのウィンドウおよび先祖ウィンドウが全てマップされていることが条件になります。マップ、アンマップは以下の関数で行ないます。
XMapWindow (display, window)
XMapSubwindows (display, parent)
XMapRaised (display, window)XMapSubWindows
はparent
の子ウィンドウ(子孫ではない)を全てマップします。また、ウィンドウを消滅させることもできます。
XUnmapWindow (display, window)
XUnmapSubwindows (display, parent)これらは指定されたウィンドウの子孫もすべて消滅させます。
XDestroyWindow (display, window)
XDestroySubwindows (display, parent)
クライアントからのリクエストを掃き出す (flush) には以下の関数を使用します。
XFlush (display)
では実際にウィンドウを作成して表示するプログラムを作ってみます(0302.c
)。実行結果は以下のようになります。ウィンドウマネージャの枠が邪魔ですが我慢して下さい。
/* 0302.c ; make windows and map them */ #include <X11/Xlib.h> #include <X11/Xutil.h> #include <stdio.h> void main() { Display *d; Window w0, w1, w2, w3; unsigned long black, white; d = XOpenDisplay(NULL); black = BlackPixel(d, 0); white = WhitePixel(d, 0); w0 = XCreateSimpleWindow(d, RootWindow(d,0), 100, 100, 600, 400, 2, black, white); w1 = XCreateSimpleWindow(d, w0, 50, 50, 200, 150, 2, black, white); w1 = XCreateSimpleWindow(d, w0, 200, 100, 200, 150, 2, black, white); w2 = XCreateSimpleWindow(d, w0, 350, 200, 200, 150, 2, black, white); getchar(); XMapWindow(d, w0); XMapSubwindows(d, w0); XFlush(d); getchar(); XCloseDisplay(d); }
![]()
Index | Prev. Step | Next Step |
Technical Resource | Title Page |