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,此片段也会在每次更改时输出“回调”。
答案 0 :(得分:1)
如果您已经下载了分发版,请查看test / input.cxx和test / tree.cxx。两者都有选择时不同的测试。
WHEN_CHANGED仅对编辑框,浏览器和表格有意义 - 您可以在键入数据时验证数据.WHEN_RELEASE不会发生这种情况。对于所有其他小部件,几乎没有区别。
修改强>
为了每次发布,有三个选项之一
如果您查看来源,在相同的例行程序中,进一步向下,它会说
#if FLTK_ABI_VERSION >= 10301
如果库是在FLTK_ABI_VERSION设置为10301的情况下构建的,那么它将调用重新选择,但是当设置了#define时,它将会执行大量其他操作,因为它会影响所有小部件
在FL_Tree :: select中注释#if FLTK_ABI_VERISON和相应的#endif。