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

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

モードなしメッセージを表示する場合は、dtb_show_message() を使用します。この関数はモード付きではなく、戻り値を返さないので、メッセージ・ボックス・ボタンのコールバックは、「モードなしメッセージを関数に接続するには」で説明したように、接続エディタを介して指定できます。メッセージ・ボックスに指定したボタンは、メッセージ・オブジェクトの [いつ] 項目として接続エディタに表示されます。

前節と同じ例を使用して、ユーザが数字を入力した場合に、名字を入力するためのテキスト・フィールドにモードなしでエラー・メッセージを表示させます。前述したように、まずメッセージ・ボックスの 2 つのボタン (「やり直し」と「継続」) 用の 1 組の関数呼び出し接続を行う必要があります。コードが生成されている場合は、適切な処理を行うルーチンにコードを追加してください。この場合、やり直しルーチンはテキスト・フィールド内を空にし、継続ルーチンは何も実行しません。

void 
verify_last_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;    
    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);
            dtb_show_message(instance->textfield,
                        &dtb_foo_message, NULL, NULL);
         }
     }

     /*** DTB_USER_CODE_END  ^^^ Add C code above ^^^ ***/
}

void
start_overCB(
     Widget widget,
     XtPointer clientData,
     XtPointer callData 
) 
{
    /*** DTB_USER_CODE_START vvv Add C variables and code below vvv ***/

    DtbFooMainwindowInfo instance = (DtbFooMainwindowInfo) clientData;

    /*** DTB_USER_CODE_END   ^^^ Add C variables and code above ^^^ ***/
      
    /*** DTB_USER_CODE_START vvv Add C code below vvv ***/
      
    XmTextFieldSetString(dtb_foo_mainwindow.textfield2, "");

    /*** DTB_USER_CODE_END   ^^^ Add C code above ^^^ ***/
}


void
continueCB(
    Widget widget,
    XtPointer clientData,
    XtPointer callData 
) 
{    

    /*** DTB_USER_CODE_START vvv Add C variables and code below vvv ***/
    /*** DTB_USER_CODE_END   ^^^ Add C variables and code above ^^^ ***/

    /*** DTB_USER_CODE_START vvv Add C code below vvv ***/
    /*** DTB_USER_CODE_END   ^^^ Add C code above ^^^ ***/
}

上述の 2 つのルーチン start_overCB()continueCB() は、dtb_show_message() のコールを介して、2 つのボタンのコールバックとして追加されます。次に挙げるのは、(dtb_utils.c から) コールバックを追加するコードの一部です。

/* Add Callbacks if necessary */
if (mbr->action1_callback != (XtCallbackProc) NULL)
    XtAddCallback(msg_dlg, XmNokCallback, mbr->action1_callback, NULL);
if (mbr->cancel_callback != (XtCallbackProc) NULL)
    XtAddCallback(msg_dlg, XmNcancelCallback, mbr->cancel_callback, NULL);
if (mbr->action2_callback != (XtCallbackProc) NULL)
{
    action_btn = dtb_MessageBoxGetActionButton(msg_dlg, DTB_ACTION2_BUTTON);
    if (action_btn != NULL)
        XtAddCallback(action_btn, XmNactivateCallback,
                      mbr->action2_callback, NULL);
}
if (mbr->action3_callback != (XtCallbackProc) NULL)
{
    action_btn = dtb_MessageBoxGetActionButton(msg_dlg, DTB_ACTION3_BUTTON);
if (action_btn != NULL)
    XtAddCallback(action_btn, XmNactivateCallback, mbr->action3_callback, NULL);
}

構造体 mbr には、メッセージに必要なすべての情報が含まれています。構造体には、メッセージ・オブジェクトが dtb_&_&_initialize() ルーチン (この例では dtb_foo_message_initialize()) を介して作成された時の、メッセージ・エディタで指定された値が入っています。