○複数のウィンドウ
form1 form2の二つのウインドウを作成して
form1のボタンが押されるとform2のラベルを更新します
#include <X11/StringDefs.h>
#include <X11/Intrinsic.h>
#include <X11/Shell.h>
#include <X11/Xaw/Form.h>
#include <X11/Xaw/Command.h>
Widget top1,top2,form1,form2;
Widget button1,label1;
//ボタンやラベルの文字を変更する
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);//再描画
}
//ボタンが押された時の動作
void Button1Callback( Widget w, XtPointer client, XtPointer called )
{
setCaption(label1,"Hello");
}
main(int argc, char **argv)
{
XtAppContext app_context;
XtToolkitInitialize();//初期化
app_context = XtCreateApplicationContext();
//Display *d = XtOpenDisplay(app_context, NULL, NULL, NULL, NULL, 0, &argc, argv);
Display *d=XtDisplay(XtVaAppInitialize( &app_context, "test", NULL, 0, &argc, argv,NULL,NULL));
//form1を作成
{
top1 = XtAppCreateShell("form1", "form1", applicationShellWidgetClass, d,NULL,0);
form1 = XtVaCreateManagedWidget("form1",formWidgetClass,top1,
XtNheight,200,
XtNwidth, 200,
NULL);
XtRealizeWidget(top1);
}
//form2を作成
{
top2 = XtAppCreateShell("form2", "form2", applicationShellWidgetClass, d,NULL,0);
form2 = XtVaCreateManagedWidget("form2",formWidgetClass,top2,
XtNheight,200,
XtNwidth, 200,
NULL);
XtRealizeWidget(top2);
}
//ボタンの作成
button1 = XtVaCreateManagedWidget("button1",//ウィジット名
commandWidgetClass,//ボタンクラスを指定
form1,
//リソースの直接入力(どんどん追加できる)
XtNlabel,"Button1 test",//表示される文字
XtNhorizDistance, 50,//開始位置
XtNvertDistance,55,
XtNwidth,100,//幅と高さ
XtNheight,20,
XtNborderWidth,1,//境界線
//リソースここまで
NULL);
XtAddCallback(button1, XtNcallback,Button1Callback, NULL );//ボタンのコールバック関数を登録
//ラベルの作成
label1 = XtVaCreateManagedWidget("label1",//ウィジット名
labelWidgetClass,//ラベルクラスを指定
form2,
//リソースの直接入力(どんどん追加できる)
XtNlabel,"Label1 test",//表示される文字
XtNhorizDistance,5,//開始位置
XtNvertDistance,5,
XtNwidth,100,//幅と高さ
XtNheight,20,
XtNborderWidth,1,//境界線
//リソースここまで
NULL);
XtAppMainLoop(app_context);
}
▲トップページ
>
Linux と C