○複数のウィンドウ

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