○タイマーでラベルの文字を更新する
■ボタンやラベルの文字の変更と再描画
//ボタンやラベルの文字を変更する
void setCaption(Widget w,char*str){
Arg args[1];
XtSetArg(args[0],XtNlabel,(XtArgVal)str);
XtSetValues(w,args,1);
XClearArea(XtDisplay(w), XtWindow(w), 0, 0, 0, 0, True);//再描画
}
■タイマー
▼タイマースタートは次の関数を呼び出してスタートする
//経過時間後に関数を呼び出す設定(ミリ秒)
XtAppAddTimeOut(app_context, 500, (XtTimerCallbackProc)timer,app_context);
▼タイマーとして呼び出されるメソッド
//タイマーとして動作
void timer(XtAppContext app_context)
{
//ここにタイマーの処理内容を書く
//経過時間後に関数を呼び出す設定(ミリ秒)
XtAppAddTimeOut(app_context, 500, (XtTimerCallbackProc)timer,app_context);
}
■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 label1,edit1,button1;//ウィジットの変数
//ボタンやラベルの文字を変更する
void setCaption(Widget w,char*str){
Arg args[1];
XtSetArg(args[0],XtNlabel,(XtArgVal)str);
XtSetValues(w,args,1);
XClearArea(XtDisplay(w), XtWindow(w), 0, 0, 0, 0, True);//再描画
}
//Textウィジットから文字列を取得
void getStr(Widget w,char*str){
char*st;
Arg args[1];
XtSetArg(args[0],XtNstring,(XtArgVal)&st);
XtGetValues(w,args,1);
strcpy(str,st);
}
//Textウィジットに文字を入れる
void setStr(Widget w,char*str){
Arg args[1];
XtSetArg(args[0],XtNstring,(XtArgVal)str);
XtSetValues(w,args,1);
}
int i=0;//カウントアップする文字列を作るための変数
//タイマーとして動作
void timer(XtAppContext app_context)
{
char buf[128];
sprintf(buf,"%d",i++);//カウントアップする文字列を作る
setCaption(label1,buf);//ラベルに文字を入れる
setStr(edit1,buf);//テキストに文字を入れる
setCaption(button1,buf);//ボタンに文字を入れる
//経過時間後に関数を呼び出しを設定
XtAppAddTimeOut(app_context, 500, (XtTimerCallbackProc)timer,app_context);
}
//ボタンが押された時の動作
void Button1Callback( Widget w, XtPointer client, XtPointer called )
{
exit(0);
}
//テキストが入力された時の動作、入力されているテキストを表示
void Edit1Callback( Widget w, XtPointer cld, XtPointer cad ){
char str[128]="";
getStr(w,str);
printf("%s\n",str);
}
main( int argc, char **argv )
{
XtAppContext app_context;
Widget top, form;
top = XtVaAppInitialize( &app_context, "test", NULL, 0, &argc, argv, NULL,
//XtNwidth,500,
//XtNheight,500,
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,//読み書き可能
//XtNeditType,XawtextRead,//リードオンリー
//XtNeditType,XawtextAppend,//追加のみ
XtNecho,True,//入力文字を表示
//XtNstring,"test",//初期値
//XtNdisplayCaret,False,//カレットを表示しない
//XtNscrollHorizontal,XawtextScrollAlways,//横方向のスクロールバーを表示
//XtNscrollVertical,XawtextScrollAlways,//縦方向のスクロールバーを表示
//XtNwrap,XawtextWrapWord,//自動折り返し もしくは XawtextWrapLine
XtNhorizDistance,25,//開始位置
XtNvertDistance,30,
XtNwidth,100,//幅と高さ
//XtNheight,200,
XtNborderWidth,1,//境界線
//リソースここまで
NULL);
//テキストボックスにテキストを入れる
setStr(edit1,"testTEXT");
//カレットを文字列の最後尾に移動
XawTextSetInsertionPoint(edit1,strlen("testTEXT"));
//XawTextSetSelection(edit1,1,strlen("testTest"));//テキストを選択
XtAddCallback( XawTextGetSource(edit1), XtNcallback,Edit1Callback, NULL );//テキストのコールバック関数を登録
//ボタンの作成
button1 = XtVaCreateManagedWidget("button1",//ウィジット名
commandWidgetClass,//ボタンクラスを指定
form,
//リソースの直接入力(どんどん追加できる)
XtNlabel,"Button1 test",//表示される文字
XtNhorizDistance, 50,//開始位置
XtNvertDistance,55,
XtNwidth,100,//幅と高さ
XtNheight,20,
XtNborderWidth,1,//境界線
//リソースここまで
NULL);
XtAddCallback(button1, XtNcallback,Button1Callback, NULL );//ボタンのコールバック関数を登録
//経過時間後に関数を呼び出し、タイマーをスタートする
XtAppAddTimeOut(app_context, 500, (XtTimerCallbackProc)timer,app_context);
XtRealizeWidget( top );
XtAppMainLoop( app_context );
}
▲トップページ
>
Linux と C