C++ 适用于Linux的类似Windows的消息框-这是C++/Motif实现工作?

C++ 适用于Linux的类似Windows的消息框-这是C++/Motif实现工作?,c++,linux,messagebox,motif,C++,Linux,Messagebox,Motif,我想要一个与Windows类似的Linux消息框:它应该弹出,显示一些文本,当用户单击Ok按钮时,它应该消失并将控制权返回到调用函数 即使没有应用程序窗口,消息框也应该可以工作。因此,它创建了一个应用程序上下文,通过XmCreate*dialog将一个对话框绑定到它,当用户单击dialogs Ok按钮时,通知AppContexts主循环退出 这项工作是否符合预期? 这是否会自动销毁在该过程中创建的所有小部件和应用程序上下文(如果没有,将如何完成?) 代码如下: 静态XtAppContext-

我想要一个与Windows类似的Linux消息框:它应该弹出,显示一些文本,当用户单击Ok按钮时,它应该消失并将控制权返回到调用函数

即使没有应用程序窗口,消息框也应该可以工作。因此,它创建了一个应用程序上下文,通过XmCreate*dialog将一个对话框绑定到它,当用户单击dialogs Ok按钮时,通知AppContexts主循环退出

这项工作是否符合预期? 这是否会自动销毁在该过程中创建的所有小部件和应用程序上下文(如果没有,将如何完成?)

代码如下:

静态XtAppContext-appContext; 静态窗口小部件; void XmCloseMsgBox(小部件w、XtPointer clientData、XmPushButtonCallbackStruct*cbs) { appContext.exit_标志=1; } 无效XmMessageBox(const char*pszMsg,bool bError) { 微件msgBox; XmString XmString=XmStringCreateLocalized(const_cast(pszMsg)); Arg-args[1]; topWidget=XtVaAppInitialize(&appContext,“应用程序名称”,NULL,0, &gameData.app.argC,gameData.app.argV,NULL,NULL); //设置消息框文本 XtSetArg(args[0],XmNmessageString,xmString); //创建并标记消息框 xMsgBox=bError ?XmCreateErrorDialog(topWidget,“错误”,参数,1) :XmCreateWarningDialog(topWidget,“警告”,args,1); //删除文本资源 XmStringFree(xmString); //删除“帮助”和“取消”按钮 XtUnmanageChild(XmMessageBoxGetChild(xMsgBox,XmDIALOG_CANCEL_按钮)); XtUnmanageChild(XmMessageBoxGetChild(xMsgBox,XmDIALOG_HELP_按钮)); XtAddCallback(xMsgBox、XmNokCallback、XmCloseMsgBox、NULL); XtRealizeWidget(topWidget); //显示消息框 //XtManageChild(xMsgBox); XtAppMainLoop(app); }
我想下面的代码可能就是我想要的:

XtRealizeWidget (topWid);
// display message box
appContext.exit_flag = 0;
XtAppMainLoop (app); 
while (!appContext.exit_flag) // wait in case XtAppMainLoop has its own thread
    ;
XtUnrealizeWidget (topWid); // destroy topWid and all its children

我想下面的代码可能就是我想要的:

XtRealizeWidget (topWid);
// display message box
appContext.exit_flag = 0;
XtAppMainLoop (app); 
while (!appContext.exit_flag) // wait in case XtAppMainLoop has its own thread
    ;
XtUnrealizeWidget (topWid); // destroy topWid and all its children

碰巧的是,你的最后一个问题得到了相当及时的回答,但你并没有投赞成票,没有接受,也没有留下要求更多帮助的评论。事实上,你似乎从未接受过任何问题的答案。你觉得没有得到有用的答案吗?实际上,我上面代码的主要问题是,当我设置appContext.exit_flag=1时,topWidget和appContext会发生什么变化。我是否必须以某种方式(如何)将它们返回到Motif,或者它们将自动释放?这是一件很难尝试的事情——与测试上述代码是否显示消息框不同,我认为我不能用<100的声望来提升投票。在另一个问题上投票并标记你的回答。回答你的问题:到目前为止,唯一有用的答案(我希望如此)是你的。我正在寻找一个轻量级的消息框,并希望能够避免仅仅因为消息框这样简单的东西而不得不将半打或更多额外的库链接到我的应用程序。在Linux上以可接受的开销实现这样的功能是件很痛苦的事情。我希望使用Motif并不意味着我必须费力地完成额外的lib…我同意,使用更大的GUI库来解决一个简单的问题也会困扰我。我相信Motif会完成这项工作,在它的时代,它是一流的。谢谢你的反馈!我会尽我所能给你一些更好的答案。碰巧,你的最后一个问题得到了相当及时的回答,但你没有投赞成票,没有接受,也没有留下要求更多帮助的评论。事实上,你似乎从未接受过任何问题的答案。你觉得没有得到有用的答案吗?实际上,我上面代码的主要问题是,当我设置appContext.exit_flag=1时,topWidget和appContext会发生什么变化。我是否必须以某种方式(如何)将它们返回到Motif,或者它们将自动释放?这是一件很难尝试的事情——与测试上述代码是否显示消息框不同,我认为我不能用<100的声望来提升投票。在另一个问题上投票并标记你的回答。回答你的问题:到目前为止,唯一有用的答案(我希望如此)是你的。我正在寻找一个轻量级的消息框,并希望能够避免仅仅因为消息框这样简单的东西而不得不将半打或更多额外的库链接到我的应用程序。在Linux上以可接受的开销实现这样的功能是件很痛苦的事情。我希望使用Motif并不意味着我必须费力地完成额外的lib…我同意,使用更大的GUI库来解决一个简单的问题也会困扰我。我相信Motif会完成这项工作,在它的时代,它是一流的。谢谢你的反馈!我会尽我所能给你更多的好答案。