2017-09-15 32 views
0

documentation for Fl_Tree in FLTK 1.3.4說:Fl_Tree回調時FL_WHEN_RELEASE

回調()被調用取決於當()

  • FL_WHEN_RELEASE的值 - 回調調用時鼠標左按鈕被上釋放項目
  • FL_WHEN_CHANGED - 回調時,鼠標左鍵調用改變選擇狀態

但我不能得到回調,如果鼠標被釋放,我看不出兩者之間的區別。有任何想法嗎?

#include <FL/Fl.H> 
#include <FL/Fl_Double_Window.H> 
#include <FL/Fl_Tree.H> 

static void cb_(Fl_Tree*, void*) 
{ 
    printf ("callback\n"); 
} 

int main() 
{ 
    Fl_Double_Window* w = new Fl_Double_Window(325, 325); 
    Fl_Tree* o = new Fl_Tree(25, 25, 255, 245); 
    o->callback((Fl_Callback*)cb_); 
    o->when(FL_WHEN_RELEASE); 
    o->add("foo/bar"); 
    o->add("foo/baz"); 
    o->end(); 
    w->show(); 
    return Fl::run(); 
} 

此片段在每次更改時都會輸出「回調」,即使設置了FL_WHEN_RELEASE也是如此。

回答

1

如果您已經下載,分發,看看測試/ input.cxx和測試/ tree.cxx。兩者在選擇時都有不同的測試。

WHEN_CHANGED只會使上編輯框,瀏覽器和表格感 - 你可以驗證數據,因爲它是在輸入這不會發生WHEN_RELEASE。對於所有其他小部件,幾乎沒有區別。

編輯

爲了釋放火災每一次,有三個選項之一

  1. 修改源FL_Tree.cxx。尋找FL_Tree :: select。將alreadySelected更改爲false。
  2. 如果你看看源,在相同的程序,再往下,它說

    #if FLTK_ABI_VERSION >= 10301 
    

    如果庫與FLTK_ABI_VERSION設置爲10301建成,它將調用重新選擇,但也有一個整體當這個#define被設置,因爲它會影響所有小部件,所以會加載其他東西。

  3. 在FL_Tree :: select中註釋掉#if FLTK_ABI_VERISON和相應的#endif。

+0

我應該提到,我也嘗試測試/樹的例子。所以你說這裏的文檔是錯的?它清楚地表明** FL_WHEN_RELEASE - 在項目上釋放鼠標左鍵時調用回調** – Andy

+0

它們都是正確的 - 它只是上下文。在樹視圖中,項目不能部分選中,因此更改和版本都具有相同的行爲。在編輯框中,可以部分選擇一個項目,以便它們具有不同的行爲。 – cup

+0

但是在Fl_Tree上,如果點擊一個已經選擇的項目,它確實會有所不同。如果之前選擇了另一個項目,我期望回調FL_WHEN_CHANGED(因爲選擇已更改)。但是,如果已經選擇的項目再次點擊我期待FL_WHEN_RELEASE – Andy