これは、図 15-1 と 図 15-2 に示している簡単な Motif アプリケーションのソースコードです。ラベルウィジェットで斜体の ASCII ラベル文字列を表示するには、任意のコマンド行引数を使用してアプリケーションを起動してください。
次に、この簡単な Motif アプリケーションのコピー元のファイルを示します。ファイルを作成し、XENVIRONMENT 変数にパス名を設定すれば、このアプリケーションが使用できます。
phoenix% setenv XENVIRONMENT /export/home/zelda/resfile
Example.*geometry: 400X100 Example.*orientation: XmHORIZONTAL Example.*label.labelString: Launch an application Example.*xclock.labelString: Run xclock Example.*xterm.labelString: Run xterm Example.*xmag.labelString: Run xmag Example.*goodbye.labelString: Quit Example.*XmPushButton*background: blue Example.*XmLabel*foreground: white Example.*XmLabel*foreground: white
phoenix% cc -I/usr/openwin/include -I/usr/dt/include ex.c -o ¥ Example -L/usr/openwin/lib -L/usr/dt/lib -lXm -lXt -lX11 -lXtsol -ltsol -lDtTsol |
#include <stdio.h> #include <X11/Intrinsic.h> #include <X11/StringDefs.h> #include <Xm/Xm.h> #include <Xm/Label.h> #include <Xm/PushB.h> #include <Xm/Form.h> #include <tsol/Xtsol.h> #include <Dt/label_clipping.h> XTsolResAttributes winattrs; int retval, error; uid_t uid; Window window; Display *display; char *string = (char *)0, *string1 = (char *)0, *string2 = (char *)0, *string3 = (char *)0, *string4 = "SECRET"; XmFontList fontlist; XmString xmstr; XFontStruct *italic; Arg args[9]; Dimension width = 144; Widget stringLabel; bslabel_t senslabel; bclabel_t cmwlabel; /* コールバック */ void Xclock(Widget w, caddr_t client_data, caddr_t call_data) { system("xclock &"); } void Xterm(Widget w, caddr_t client_data, caddr_t call_data) { system("xterm &"); } void Quit(Widget w, caddr_t client_data, caddr_t call_data) { fprintf(stderr, "exiting . . .¥n"); exit(0); } main(int argc, char **argv) { Widget rowcolumn, label, xclock, xterm, quit, form, topLevel; int i = 0; Arg args[9]; /* ウィジェットを作成する */ topLevel = XtInitialize(argv[0], "XMCmds1", NULL, 0, &argc, argv); form = XtCreateManagedWidget("form", xmFormWidgetClass, topLevel, NULL, 0); /* コマンドの引数にラベルウィジェットが使用する ASCII 文字列とフォントリストを持つ */ /* アプリケーションはここで起動する */ if (argc == 2) { /* フォントリストを作成しラベルを変換する */ retval = getcmwplabel(&cmwlabel); getcsl(&senslabel, &cmwlabel); italic = XLoadQueryFont(XtDisplay(topLevel), "-adobe-times-medium-i-*-*-14-*-*-*-*-*-iso8859-1"); fontlist = XmFontListCreate(italic, "italic"); xmstr = (XmString)Xbsltos(XtDisplay(topLevel), &senslabel, width, fontlist, LONG_WORDS); /* フォントリストとラベルテキストを使用してラベルウィジェットを作成する */ i=0; XtSetArg(args[i], XmNfontList, fontlist); i++; XtSetArg(args[i], XmNlabelString, xmstr); i++; label = XtCreateManagedWidget( "label", xmLabelWidgetClass, form, args, i); } /* コマンドの引数にラベルウィジェット用の資源ファイル内のテキストを使用しない */ /* アプリケーションはここで起動する */ else { label = XtCreateManagedWidget("label", xmLabelWidgetClass, form, NULL, 0); } /* 引き続きウィジェットを作成する */ i=0; XtSetArg(args[i], XmNtopAttachment, XmATTACH_WIDGET); i++; XtSetArg(args[i], XmNtopWidget, label); i++; XtSetArg(args[i], XmNleftAttachment, XmATTACH_FORM); i++; XtSetArg(args[i], XmNrightAttachment, XmATTACH_POSITION); i++; XtSetArg(args[i], XmNrightPosition, 33); i++; XtSetArg(args[i], XmNbottomAttachment, XmATTACH_FORM); i++; xclock = XtCreateManagedWidget("xclock", xmPushButtonWidgetClass, form, args, i); i=0; XtSetArg(args[i], XmNtopAttachment, XmATTACH_WIDGET); i++; XtSetArg(args[i], XmNtopWidget, label); i++; XtSetArg(args[i], XmNleftAttachment, XmATTACH_POSITION); i++; XtSetArg(args[i], XmNleftPosition, 33); i++; XtSetArg(args[i], XmNrightAttachment, XmATTACH_POSITION);i++;Ha>