【问题标题】:Remove close button from BulletinBoard widget in Motif从 Motif 中的 BulletinBoard 小部件中删除关闭按钮
【发布时间】:2015-06-18 21:26:52
【问题描述】:

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

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

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

或者我可以用这个完全删除它:

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

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

【问题讨论】:

    标签: c widget motif


    【解决方案1】:

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

    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);
    

    【讨论】:

    • 这样做的副作用似乎是我无法再将公告板移动到桌面上的任何其他位置。这不是杀手,但肯定是不可取的。
    【解决方案2】:

    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 函数没有正确的签名。

    【讨论】:

    • 至于你的@FredK, buttonCB 是这样定义的, void buttonCB(Widget w, XtPointer client_data, XtPointer call_data);你是对的,我不需要回调函数上的 (XtCallbackProc) 强制转换。但是我 DO 需要对客户端数据进行 (XtPointer) 强制转换,否则我会收到警告:传递 'XtAddCallback' 的 arg 4 会在没有强制转换的情况下从整数生成指针。
    • 为了清楚起见,这是一个 BulletinBoardDialog,它是通过按下按钮创建的弹出窗口。我不想从顶层删除关闭按钮。事实上,我已经将关闭按钮绑定到我自己的回调 XmAddWMProtocolCallback(toplevel, XmInternAtom(display, "WM_DELETE_WINDOW", True), buttonCB, (XtPointer)SHUTDOWN);正如我在原始问题中提到的,我尝试将回调附加到 BulletinBoardDialog 的关闭按钮,但没有奏效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 2016-05-14
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    相关资源
    最近更新 更多