1
我想要一個類似於Windows的Linux消息框:它應該彈出,顯示一些文本,並且當用戶單擊Ok按鈕時,它應該消失並將控制權返回給調用函數。用於Linux的類似於Windows的消息框 - 此C++/Motif實現的工作原理是什麼?
即使根本沒有應用程序窗口,消息框也應該可以工作。所以它創建了一個應用程序上下文,通過XmCreate *對話框連接到一個對話框,當用戶點擊對話框的確定按鈕時,告訴應用程序上下文主循環退出。
這項工作是否像預期的那樣工作? 這是否會自動銷燬所有在過程中創建的小部件和應用程序上下文(如果沒有,那該怎麼辦?)?
下面的代碼:
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);
}
碰巧,你的最後一個問題http://stackoverflow.com/questions/1386319/ho-to-kill-xtappmainloop-motif得到了相當及時的回答,但是您還沒有投入,接受它,或者留下了一條要求更多幫助的評論。 事實上,你似乎沒有接受任何問題的答案。你覺得你沒有得到有用的答案嗎? – DigitalRoss 2009-09-06 21:45:52
其實上面代碼的主要問題是當我設置appContext.exit_flag = 1時,topWidget和appContext會發生什麼。我是否必須以某種方式將它們返回Motif(如何),還是會自動釋放它們?這是一件很難嘗試的事情 - 不像測試上面的代碼是否顯示消息框 – karx11erx 2009-09-06 21:57:26
我認爲我不能滿足<100的聲望。在另一個問題中提出並標記了您的回覆。 – karx11erx 2009-09-06 22:00:55