【问题标题】:De select Motif arrowButton取消选择 Motif 箭头按钮
【发布时间】:2014-03-04 14:35:19
【问题描述】:

使用 Motif 工具包,我们可以使用 API "XmCreateArrowButton" 创建箭头按钮。

现在,当单击箭头按钮时,该按钮被选中并保持选中状态。箭头按钮周围有一个黑色边框。

有没有一种方法,当点击箭头按钮时,按钮被选中,然后被取消选中。

这里的问题是,如果按钮始终保持在选中状态,它不会响应其他键盘事件(例如按下 ENTER 键)。

提前感谢您的帮助。

【问题讨论】:

    标签: c linux motif


    【解决方案1】:

    您可能缺少 arm 和 disarm 回调。我正在以老式方式执行此操作,因为我以前从未使用过 XmCreateArrowButton。老式的方式只使用 XtVaCreateManagedWidget。会是这样的

    Widget arrow = XtVaCreateManagedWidget("arrow",
        xmArrowButtonGadgetClass, container, /* container will be something like a rowcol widget*/
        XmNarrowDirection, XmARROW_UP,
        NULL);
    XtAddCallback(arrow, XmNarmCallback, ouch, 10);
    XtAddCallback(arrow, XmNdisarmCallback, ouch, 10);
    ...
    void ouch(Widget w, XtPointer client_data, XtPointer call_data)
    {
       int value = (int) client_data; /* this will be the 10 passed in */
       XmArrowButtonCallbackStruct* cbs = (XmArrowCallbackStruct*) call_data;
    
       switch (cbs->reason)
       {
       case XmCR_ARM:
           /* Pressed */
           ...
           break;
    
       case XmCR_DISARM:
           /* released */
           ...
           break;
    
       default:
           /* do nothing */
           break;
       }
    }
    

    【讨论】:

    • 感谢您的回复。这是否意味着在 XmCR_DISARM 事件中,我可以将焦点转移到其他一些 UI 元素。它是如何工作的?
    • 在撤防事件中,不需要做任何事情:你只是抓住它说你正在处理它,然后什么都不做。您真的想改变焦点还是希望用户这样做?智能焦点移动是不可取的:大多数形式的智能只会惹恼用户。您可以访问 X Window 系统手册的第 4 卷和第 6a 卷吗?您要问的大部分内容都在其中。
    猜你喜欢
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 2011-07-17
    • 2021-09-01
    • 1970-01-01
    • 2015-07-01
    相关资源
    最近更新 更多