○色の変更

■ボタンやラベル、テキスト、フォームの背景色(前景色)の変更ができます

unsigned long color(Display *display, char *color){
	Colormap cmap;
	XColor c0,c1;
	cmap = DefaultColormap(display,0);
	XAllocNamedColor(display,cmap,color,&c1,&c0);
	return c1.pixel;
}

void backgroundColorChanged(Widget w,char*colorStr){
	Pixel  pixel=color(XtDisplay(w),colorStr);
	XtVaSetValues(w, XtNbackground,pixel, NULL );//背景色の設定
	//XtVaSetValues(w, XtNforeground,pixel, NULL );//前景色の設定
	//XtVaGetValues(ww, XtNbackground, &pixel, NULL );//値の取得
}

▼上のメソッドを次のように呼び出します

backgroundColorChanged(button1,"rgb:00/00/ff");


■タイマーを使い背景色の変更

500msごとに背景色を変更します









#include <X11/StringDefs.h>
#include <X11/Intrinsic.h>
#include <X11/Xaw/Form.h>
#include <X11/Xaw/Label.h>
#include <X11/Xaw/Command.h>
#include <X11/Xaw/AsciiText.h>

Widget form,label1,edit1,button1;//ウィジットの変数

unsigned long color(Display *display, char *color){
	Colormap cmap;
	XColor c0,c1;
	cmap = DefaultColormap(display,0);
	XAllocNamedColor(display,cmap,color,&c1,&c0);
	return c1.pixel;
}

void backgroundColorChanged(Widget w,char*colorStr){
	Pixel  pixel=color(XtDisplay(w),colorStr);
	XtVaSetValues(w, XtNbackground,pixel, NULL );//背景色の設定
	//XtVaSetValues(w, XtNforeground,pixel, NULL );//前景色の設定
	//XtVaGetValues(ww, XtNbackground, &pixel, NULL );//値の取得
}

int i=0;

//タイマーとして動作
void timer(XtAppContext app_context) 
{
	if(i){
		backgroundColorChanged(form,"rgb:ff/00/00");
		backgroundColorChanged(button1,"rgb:00/00/ff");
		backgroundColorChanged(label1,"rgb:00/00/ff");
		backgroundColorChanged(edit1,"rgb:00/00/ff");
		i=0;
	}else{
		backgroundColorChanged(form,"rgb:00/00/ff");
		backgroundColorChanged(button1,"rgb:ff/00/00");
		backgroundColorChanged(label1,"rgb:ff/00/00");
		backgroundColorChanged(edit1,"rgb:ff/00/00");
		i=1;
	}

	//経過時間後に関数を呼び出しを設定
	XtAppAddTimeOut(app_context, 500, (XtTimerCallbackProc)timer,app_context); 
}

main( int argc, char **argv )
{
	XtAppContext app_context;
	Widget top;

	top = XtVaAppInitialize( &app_context, "test", NULL, 0, &argc, argv, NULL,NULL);

	form = XtVaCreateManagedWidget("form",formWidgetClass,top,NULL);

	//ラベルの作成
	label1 = XtVaCreateManagedWidget("label1",//ウィジット名
					labelWidgetClass,//ラベルクラスを指定
					form,
					//リソースの直接入力(どんどん追加できる)
					XtNlabel,"Label1 test",//表示される文字
					XtNhorizDistance,5,//開始位置
					XtNvertDistance,5,
					XtNwidth,100,//幅と高さ
					XtNheight,20,
					XtNborderWidth,1,//境界線
					//リソースここまで
					NULL);

	//テキストの作成
	edit1 = XtVaCreateManagedWidget("edit1",//ウィジット名
					asciiTextWidgetClass,//クラスを指定
					form,
					//リソースの直接入力(どんどん追加できる)
					XtNeditType,XawtextEdit,//読み書き可能
					XtNecho,True,//入力文字を表示
					XtNhorizDistance,25,//開始位置
					XtNvertDistance,30,
					XtNwidth,100,//幅と高さ
					//XtNheight,200,
					XtNborderWidth,1,//境界線
					//リソースここまで
					NULL);


	//ボタンの作成
	button1 = XtVaCreateManagedWidget("button1",//ウィジット名
					commandWidgetClass,//ボタンクラスを指定
					form,
					//リソースの直接入力(どんどん追加できる)
					XtNlabel,"Button1 test",//表示される文字
					XtNhorizDistance, 50,//開始位置
					XtNvertDistance,55,
					XtNwidth,100,//幅と高さ
					XtNheight,20,
					XtNborderWidth,1,//境界線
					//リソースここまで
					NULL);


	//経過時間後に関数を呼び出し、タイマーをスタートする
	XtAppAddTimeOut(app_context, 500, (XtTimerCallbackProc)timer,app_context); 

	XtRealizeWidget( top );
	XtAppMainLoop( app_context );
}










▲トップページ > Linux と C