2014-03-04 15 views
1

使用Motif工具包,我們可以使用API​​「XmCreateArrowButton」創建箭頭按鈕。De select Motif arrowButton

現在當單擊箭頭按鈕時,該按鈕被選中並保持在選定狀態。箭頭按鈕周圍繪有黑色邊框。

有沒有一種方法,當點擊箭頭按鈕時,按鈕被選中,然後變爲未被選中。

這裏的問題是,如果按鈕始終處於選定狀態,它不會響應其他鍵盤事件(例如按下ENTER鍵)。

在此先感謝您的幫助。

回答

2

您可能錯過了手臂和撤防回撥。我是這樣做的老式的方式,因爲我從來沒有使用過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; 
    } 
} 
+0

感謝您的回覆。那麼這是否意味着在XmCR_DISARM事件中,我可以將焦點轉移到其他UI元素。這是如何運作的? –

+1

在解除武裝的事件中,不需要做任何事情:你只是想抓住它說你正在處理它,然後什麼都不做。你真的想改變焦點還是你想讓用戶去做?聰明的焦點運動是不可取的:大多數形式的智能只會讓用戶惱火。你有權訪問X Window系統手冊的第4卷和第6a卷?你要問的大部分都在那裏。 – cup