Previous: 準備
Up: Xウィンドウ実習
第3回 多数のウィンドウを使う

Next: 配列の利用
Previous Page: 準備
Next Page: 配列の利用

色を名前で指定する

前回は色を指定するのに rgb の三原色のデータを与えました。 この方法の他に色の名前を使って指定することもできます。 関数は XAllocColor() の代わりに XAllocNamedColor() を使用します。 red, blue など単純な色を確保するのには こちらの方法の方が便利でしょう。
3つの色をカラーマップから取り出し、それぞれの色を背景色に設定した ボタン状のウィンドウを生成してみましょう。 親のウィンドウを win ボタンのウィンドウを sub1, sub2, sub3 と名付けます。
プログラムを完成させてください。ソース・ファイル名は win8.c とします。

win8.c

#include<stdio.h>
#include<X11/Xlib.h>
main()
{
 Display *dsp;                       /* ディスプレイ構造体の宣言 */
 Window   win, sub1, sub2, sub3;     /* ウィンドウ構造体の宣言 */
 Colormap cmap;                      /* カラーマップ構造体の宣言 */
 XColor   iro1, iro2, iro3, dummy;   /* カラー構造体の宣言 */

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

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

/* カラーマップから色を得る */ XAllocNamedColor( dsp, cmap, "red", &iro1, &dummy ); XAllocNamedColor( dsp, cmap, "green", &iro2, &dummy ); XAllocNamedColor( dsp, cmap, "blue", &iro3, &dummy );

/* ウィンドウの生成 */ win = XCreateSimpleWindow( dsp, DefaultRootWindow(dsp), 0, 0, 600, 50, 1, BlackPixel(dsp,0), WhitePixel(dsp,0) ); sub1 = XCreateSimpleWindow( dsp, win, 3, 3, 40, 40, 2, BlackPixel(dsp,0), iro1.pixel ); sub2 = XCreateSimpleWindow( dsp, win, 53, 3, 40, 40, 2, BlackPixel(dsp,0), iro2.pixel ); sub3 = XCreateSimpleWindow( dsp, win, 103, 3, 40, 40, 2, BlackPixel(dsp,0), iro3.pixel );

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

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

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


プログラムができたら、コンパイルして実行してみましょう。 3個の色付きのボタンが現われればOKです。 (だだし、ボタンと言ってもまだ何の働きもありません。)
コンパイルの命令には ccx を使ってください。

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