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 を使ってください。