○色の変更
■ボタンやラベル、テキスト、フォームの背景色(前景色)の変更ができます
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