FL_WHEN_RELEASE时的Fl_Tree回调

时间:2017-09-15 14:13:39

标签: fltk

documentation for Fl_Tree in FLTK 1.3.4说:

  

根据when()

的值调用callback()      
      
  • 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 个答案:

答案 0 :(得分:1)

如果您已经下载了分发版,请查看test / input.cxx和test / 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。