それではXt Intrinsicsを使ったプログラムがどういう感じになるかを見て みましょう。
#include <X11/Intrinsic.h> #include <X11/StringDefs.h> #include <X11/Xaw/Label.h> Widget toplevel, label; toplevel = XtInitialize( argv[ 0 ], "Hello", NULL, 0, &argc, argv ); label = XtCreateManagedWidget( "hello_world", labelWidgetClass, toplevel, NULL, 0 ); XtRealizeWidget( toplevel ); XtMainLoop( );
このプログラムは"hello_world"という文字列を表示するプログラムです。もっ と正確にいうと、hello_worldというラベルの張られたウインドウを表示する プログラムという意味です。インクルードファイルのうちX11/Intrinsic.hと X11/StringDefs.hはXt Intrinsicsを使うために必要なものです。 X11/Xaw/Label.hはラベルという型のウィジェットを使うために必要なもので す。(XawはアテナウィジェットというXt標準添付のウィジェットを表わします。) 中身を見ましょう。XtInitializeはツールキットの初期化をおこなうものです。 成功するとこのアプリケーションのおおもとになるウィジェットを返します。 このアプリケーションで作られる全てのウィジェットはこのウィジェットもし くはその子孫のもとに作られることになります。次のXtCreateManagedWidget ではラベルというウィジェットを作ります。この関数はウィジェットを作って、 それを親の管理下に置きます。マネージするという意味は、例えば親のウイン ドウの寸法や位置が変わったときそれに合わせて子のウィジェットも自動的に 変更されるということです。単にクリエートしただけでは親は面倒を見てくれ ないのです。その次のXtRealizeWidgetで実際にウインドウが表示されます。 親がリアライズされたのでマネージされている子lウィジェットlabelも表示さ れるわけです。最後のXtMainLoopはイベントの処理をする無限ループです。こ の書き方からわかるようにユーザのイベント処理ルーチンはここまでの間にウィ ジェットごとに登録されていなければなりません。実際のXt Intrinsicsによ るプログラムはほとんどが初期化の手続きとコールバックと呼ばれるイベント 処理ルーチンで表わされます。通常の手続き型プログラムと違うところです。