共通デスクトップ環境 アプリケーション・ビルダ・ユーザーズ・ガイド

モード付きメッセージ用のコードを記述するには

メッセージをモード付き表示する場合は、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 ^^^ ***/ 
}