1

Windows のメッセージ ボックスと同様の Linux 用のメッセージ ボックスが必要です。メッセージ ボックスがポップアップし、テキストが表示され、ユーザーが [OK] ボタンをクリックすると消えて、呼び出し元の関数に制御が戻るはずです。

アプリケーション ウィンドウがまだまったくない場合でも、メッセージ ボックスは機能するはずです。したがって、アプリケーション コンテキストを作成し、XmCreate*Dialog を介してダイアログを関連付け、ユーザーがダイアログの [OK] ボタンをクリックすると、アプリ コンテキストのメイン ループに終了するように指示します。

これは意図したとおりに機能しますか? これにより、プロセスで作成されたすべてのウィジェットとアプリ コンテキストが自動的に破棄されますか (いいえの場合、どのように行う必要がありますか?)

コードは次のとおりです。

static XtAppContext appContext; static Widget topWidget; void XmCloseMsgBox (Widget w, XtPointer clientData, XmPushButtonCallbackStruct *cbs) { appContext.exit_flag = 1; } void XmMessageBox (const char* pszMsg, bool bError) { Widget msgBox; XmString xmString = XmStringCreateLocalized (const_cast<char*>(pszMsg)); Arg args [1]; topWidget = XtVaAppInitialize (&appContext, "Application Name", NULL, 0, &gameData.app.argC, gameData.app.argV, NULL, NULL); // setup message box text XtSetArg (args [0], XmNmessageString, xmString); // create and label message box xMsgBox = bError ? XmCreateErrorDialog (topWidget, "Error", args, 1) : XmCreateWarningDialog (topWidget, "Warning", args, 1); // remove text resource XmStringFree (xmString); // remove help and cancel buttons XtUnmanageChild (XmMessageBoxGetChild (xMsgBox, XmDIALOG_CANCEL_BUTTON)); XtUnmanageChild (XmMessageBoxGetChild (xMsgBox, XmDIALOG_HELP_BUTTON)); XtAddCallback (xMsgBox, XmNokCallback, XmCloseMsgBox, NULL); XtRealizeWidget (topWidget); // display message box //XtManageChild (xMsgBox); XtAppMainLoop (app); }
4

1 に答える 1