Fl_Tree FL_WHEN_RELEASE 回调
Fl_Tree callback when FL_WHEN_RELEASE
documentation for Fl_Tree in FLTK 1.3.4 说:
The callback() is invoked depending on the value of when()
- FL_WHEN_RELEASE -- callback invoked when left mouse button is released on an item
- FL_WHEN_CHANGED -- callback invoked when left mouse changes selection state
但如果松开鼠标,我无法调用回调,而且我看不出两者之间的区别。有什么想法吗?
#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,此代码段也会在每次更改时输出 "callback"。
如果您下载了发行版,请查看 test/input.cxx 和 test/tree.cxx。两者都有针对不同选择时的测试。
WHEN_CHANGED 仅对编辑框、浏览器和表格有意义 - 您可以在输入时验证数据。WHEN_RELEASE 不会发生这种情况。对于所有其他小部件,几乎没有区别。
编辑
为了每次都触发释放,有以下三个选项之一
- 修改来源FL_Tree.cxx。寻找 FL_Tree::select。将 alreadySelected 更改为 false。
如果您查看源代码,在同一个例程中,再往下看,它说
#if FLTK_ABI_VERSION >= 10301
如果库是在 FLTK_ABI_VERSION 设置为 10301 的情况下构建的,它将调用重新选择,但是当设置此 #define 时它还会执行大量其他操作,因为它会影响所有小部件
注释掉FL_Tree::select中的#if FLTK_ABI_VERISON和对应的#endif。
documentation for Fl_Tree in FLTK 1.3.4 说:
The callback() is invoked depending on the value of when()
- FL_WHEN_RELEASE -- callback invoked when left mouse button is released on an item
- FL_WHEN_CHANGED -- callback invoked when left mouse changes selection state
但如果松开鼠标,我无法调用回调,而且我看不出两者之间的区别。有什么想法吗?
#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,此代码段也会在每次更改时输出 "callback"。
如果您下载了发行版,请查看 test/input.cxx 和 test/tree.cxx。两者都有针对不同选择时的测试。
WHEN_CHANGED 仅对编辑框、浏览器和表格有意义 - 您可以在输入时验证数据。WHEN_RELEASE 不会发生这种情况。对于所有其他小部件,几乎没有区别。
编辑
为了每次都触发释放,有以下三个选项之一
- 修改来源FL_Tree.cxx。寻找 FL_Tree::select。将 alreadySelected 更改为 false。
如果您查看源代码,在同一个例程中,再往下看,它说
#if FLTK_ABI_VERSION >= 10301
如果库是在 FLTK_ABI_VERSION 设置为 10301 的情况下构建的,它将调用重新选择,但是当设置此 #define 时它还会执行大量其他操作,因为它会影响所有小部件
注释掉FL_Tree::select中的#if FLTK_ABI_VERISON和对应的#endif。