Previous: 色を名前で指定する
Up: Xウィンドウ実習
第3回 多数のウィンドウを使う

Next: 子ウィンドウの操作
Previous Page: 色を名前で指定する
Next Page: 子ウィンドウの操作

配列の利用

前のプログラムのボタンの数をさらに増やすことを考えてみましょう。
単純にサブ・ウィンドウの生成を繰り返してもかまいませんが、 数が多くなってきたら、配列を使った方がプログラムは簡単になります。 ここではウィンドウ構造体の配列 sub[] とカラー構造体の配列 iro[] が 使用されています。 また、配列を操作するために for による繰り返しを使います。
プログラムを完成させてください。ソース・ファイル名は win9.c とします。

win9.c

#include<stdio.h>
#include<X11/Xlib.h>
main()
{
 Display *dsp;                       /* ディスプレイ構造体の宣言 */
 Window   win, sub[12];              /* ウィンドウ構造体の宣言 */
 Colormap cmap;                      /* カラーマップの宣言 */
 XColor   iro[12], dummy;            /* カラー構造体の宣言 */
 static char *cname[] = {
                         "red", "green", "blue", "yellow",
                         "pink", "sky blue", "orange", "violet",
                         "dark green", "gray", "black", "white"
                        };
 int  i;

dsp = XOpenDisplay( NULL ); /* ディスプレイのオープン */

cmap = DefaultColormap( dsp, 0 ); /* カラーマップを得る */

/* カラーマップから色を得る */ for( i=0 ; i<12 ; i++ ) XAllocNamedColor( dsp, cmap, cname[i], &iro[i], &dummy );

/* ウィンドウの生成 */ 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), iro[i].pixel );

XStoreName( dsp, win, "カラーボタン" ); /* タイトルの設定 */

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

getchar(); /* リターンキーの入力まで停止する */ XCloseDisplay( dsp ); /* ディスプレイのクローズ */ }


プログラムができたら、コンパイルして実行してみましょう。 12個の色付きのボタンが現われればOKです。
うまくいきましたか? うまくいったら、さらに下の課題に挑んでください。

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