c - 从Motif,第1张

是否可以从Motif中的BulletinBoard小部件中删除关闭按钮?或者,或者,将回调函数附加到它?我知道我可以为顶级小部件执行此操作,但似乎无法为BulletinBoard执行此操作。

对于顶层shell,我可以这样做,将回调函数附加到关闭按钮:

XmAddWMProtocolCallback(toplevel, XmInternAtom(display,"WM_DELETE_WINDOW",True),
        (XtCallbackProc)buttonCB, (XtPointer)data);

或者我可以完全删除它:

XtVaSetValues(toplevel, XmNmwmFunctions, MWM_FUNC_ALL | MWM_FUNC_CLOSE, NULL);

但这些都不适用于BulletinBoard小部件。后者没有效果。前者出错,"警告:小部件必须是VendorShell。"

最佳答案:

2 个答案:

答案 0 :(得分:1)

我找到了一种方法来做到这一点。我没有使用XtVaSetValues,而是在创建BB小部件时可以使用XtSetArg(myBB,...)。换句话说,

n=0;
XtSetArg(args[n], XmNheight, 300); n  ;
XtSetArg(args[n], XmNwidth,  300); n  ;
// ...etc...
XtSetArg(args[n], XmNmwmFunctions, MWM_FUNC_ALL|MWM_FUNC_CLOSE); n  ;  // <--- answer
myBB = XmCreateBulletinBoardDialog(parent, "myBB", args, n);

答案 1 :(得分:0)

XmBulletinBoard小部件没有关闭按钮。 您正在调用XmCreateBulletinBoardDialog,它创建一个XmDialogShell,其中包含XmBulletinBoard作为其子项。

您尝试删除对话框的关闭按钮不正确。

你应该使用

MWM_FUNC_ALL | MWM_FUNC_RESIZE | MWM_FUNC_MOVE | MWM_FUNC_MINIMIZE | MWM_FUNC_MAXIMIZE

但是在尝试时将关闭按钮绑定到您自己的方法要好得多,除非您将协议回调添加到错误的小部件 - 您需要在DialogShell上,而不是BulletinBoard。所以使用XtParent(myBB)。

顺便说一句,你不应该在你的电话中投出buttonCB;如果编译器在没有强制转换的情况下抱怨,则你的buttonCB函数没有正确的签名。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
教程弟学习网站 » c - 从Motif

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情