Previous: ルートの直接の子供は特別
Up: ウィンドウの生成と階層構造
Previous Page: ルートの直接の子供は特別
Next Page: 色を名前で指定する

配列の利用

ウィンドウの数をさらに増やすことを考えてみましょう。 数が多くなったら、配列を使った方がプログラムは簡単です。 配列を操作するために for による繰り返しを使います。

Display *dsp;                  /* ディスプレイ構造体の宣言 */
 Window   win, sub[12];         /* ウィンドウ構造体の宣言 */
 int  i;

/* ウィンドウの生成 */ win = XCreateSimpleWindow( dsp, DefaultRootWindow(dsp), 0, 0, 600, 50, 1, BlackPixel(dsp,0), WhitePixel(dsp,0) ); for( i=0 ; i<12 ; i++ ) sub[i] = XCreateSimpleWindow( dsp, win, 3+50*i, 3, 40, 40, 2, BlackPixel(dsp,0), WhitePixel(dsp,0) );

XMapWindow( dsp, win ); /* ウィンドウの表示 */ XMapSubwindows( dsp, win ); /* サブウィンドウの表示 */


上の例では、XCreateSimpleWindow() を12回繰り返して呼び出し、 12個のウィンドウを生成しています。 x座標の値が式の形になっているのは、 ウィンドウの位置を一定の間隔だけずらして一列に並べるためです。 (全部のサブ・ウィンドウが同じ場所に作られたら、 重なってしまって意味がありません。)
ウィンドウの階層構造の考え方は、 ウィンドウの数が増えてくると特に有効になります。 上の例では、12個のサブ・ウィンドウを一斉に表示させるために、 関数 XMapSubwindows() を用いています。 (この関数の引数は、表示させたいウィンドウではなく、 その親ウィンドウである点に注意)
そして親ウィンドウを移動すれば、その中の子ウィンドウも 自動的に移動することになります。 この場合も命令は XMapWindow() を1回呼ぶだけです。
つまり階層構造の考え方のおかげで、 ウィンドウのグループに対してまとまった操作を簡単に行なうことが できるわけです。

maruyama@wakhok.ac.jp
1995年02月01日 (水) 00時21分18秒 JST