Je veux une boîte de message pour Linux similaire à celle de Windows: elle devrait apparaître, afficher du texte, et lorsque l'utilisateur clique sur le bouton Ok, il devrait disparaître et retourner le contrôle à la fonction appelante.Boîte de message semblable à Windows pour Linux - cette implémentation C++/Motif fonctionnerait-elle?
La boîte de message devrait fonctionner même s'il n'y a encore aucune fenêtre d'application. Il crée donc un contexte d'application, lie une boîte de dialogue via XmCreate * Dialog, et lorsque l'utilisateur clique sur le bouton Ok des boîtes de dialogue, il indique à la boucle principale des contextes d'application de quitter.
Est-ce que cela fonctionnerait comme prévu? Est-ce que cela détruirait automatiquement tous les widgets et le contexte de l'application qui a été créé dans le processus (si non, comment cela devrait-il être fait?)?
Voici le code:
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);
}
Comme il arrive, votre dernière question http://stackoverflow.com/questions/1386319/ho-to-kill-xtappmainloop-motif a été répondu assez rapidement, mais vous ne l'avez pas mis à jour, l'avez accepté, ou laissé un commentaire demandant plus d'aide. En fait, vous ne semblez jamais avoir accepté une réponse à l'une de vos questions. Avez-vous l'impression que vous n'obtenez pas de réponses utiles? – DigitalRoss
En fait la question principale avec le code ci-dessus est ce qui arrive à topWidget et appContext quand je mets appContext.exit_flag = 1. Dois-je les renvoyer à Motif (comment), ou seront-ils libérés automatiquement? C'est quelque chose de difficile à essayer - contrairement à tester si le code ci-dessus affiche une boîte de message – karx11erx
Je pensais que je ne peux pas mettre en avant avec <100 réputation. Upvoted et marqué votre réponse dans l'autre question. – karx11erx