首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Fl_Tree回调时FL_WHEN_RELEASE

Fl_Tree回调时FL_WHEN_RELEASE
EN

Stack Overflow用户
提问于 2017-09-15 14:13:39
回答 1查看 187关注 0票数 0

FLTK 1.3.4中的树说:

根据时间()的值调用回调()

  • FL_WHEN_RELEASE --在项上释放鼠标左键时调用回调。
  • FL_WHEN_CHANGED --在鼠标左键更改选择状态时调用回调

但是,如果鼠标被释放,我就无法调用回调,而且我看不出两者之间有什么区别。有什么想法吗?

代码语言:javascript
运行
复制
#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,此片段也会对每个更改输出“回调”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-16 03:18:35

如果您下载了发行版,请查看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. 注释掉#if FLTK_ABI_VERISON和FL_Tree::select中相应的#endif。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46241677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档