メッセージをモード付き表示する場合は、dtb_show_message() を使用します。このルーチンは、ユーザが押したメッセージ・ボックス・ボタンを示す値を返します。値は、次のように dtb_utils.h で定義される列挙型です。
/* * Returns answer value for modal MessageBox */ typedef enum { DTB_ANSWER_NONE, DTB_ANSWER_ACTION1, DTB_ANSWER_ACTION2, DTB_ANSWER_ACTION3, DTB_ANSWER_CANCEL, DTB_ANSWER_HELP } DTB_MODAL_ANSWER;
その後、戻り値 (たとえば switch 文経由) をテストし、コードの該当部分を実行できます。
次に、メッセージをモード付きで表示するコード例を挙げます。foo という名前の簡単なアプリケーションを作成したとします。プロジェクトは、foo.bip と名付けられ、1 つのモジュール (foo.bil) で構成されています。モジュール foo.bil は、メイン・ウィンドウ、コントロール区画、および 2 つのテキスト・フィールドで構成されています。2 つのテキスト・フィールドのうち、1 つはユーザの名前、もう 1 つは名字を入力するためのものです。ユーザが数字を入力した場合、エラー・メッセージが表示され、数字は入力できないことをユーザに通知し、2 つの選択肢を提示します。ユーザはやり直すか継続するかを選択します。やり直す場合は入力したテキストは消去され、継続する場合は入力されたテキストはそのまま残り、テキストを変更する方法についてはユーザに任されます。
関数呼び出し接続は、両方のテキスト・フィールドについて行われ、ユーザが何かを入力するたびに呼び出されます。最初のテキスト・フィールドの関数は、入力した文字が数字かどうかをチェックします。数字の場合は、エラー・メッセージをモード付きで表示します。
void verify_first_nameCB( Widget widget, XtPointer clientData, XtPointer callData ) { /*** DTB_USER_CODE_START vvv Add C variables and code below vvv ***/ char *text = (char *)NULL; int textlen = 0; DTB_MODAL_ANSWER answer = DTB_ANSWER_NONE; DtbFooMainwindowInfo instance = (DtbFooMainwindowInfo) clientData; /*** DTB_USER_CODE_END ^^^ Add C variables and code above ^^^ ***/ /*** DTB_USER_CODE_START vvv Add C code below vvv ***/ text = XmTextFieldGetString(widget); if ((text != NULL) && (*text != NULL)) { textlen = strlen(text); if (isdigit(text[textlen-1])) { dtb_foo_message_initialize(&dtb_foo_message); answer dtb_show_modal_message(instance->textfield, &dtb_foo_message, NULL, NULL, NULL); switch (answer) { case DTB_ANSWER_ACTION1: /* Start Over */ XmTextFieldSetString(widget, ""); break; case DTB_ANSWER_ACTION2: /* Continue */ break; } } } /*** DTB_USER_CODE_END ^^^ Add C code above ^^^ ***/ }