モードなしメッセージを表示する場合は、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()) を介して作成された時の、メッセージ・エディタで指定された値が入っています。