FLTK:Fl_Value_Input子类不接收FL_KEYDOWN事件(仅FL_KEYUP)

时间:2016-10-27 12:01:40

标签: fltk

我将FL_Value_Input子类化,这样我可以在修改后为窗口小部件添加颜色,但用户尚未按下回车键。

愚蠢的是,如果事件是handle(int e)事件,其他事件(例如FL_KEYDOWNFL_KEYUP,{{},则永远不会调用FL_DRAG函数1}}等)正在传播。

窗口小部件是窗口小部件层次结构的一部分...可能是此层次结构中的父节点之一正在吸收此特定的FL_FOCUS事件吗?

编辑:显然,当我输入时,小部件也没有焦点(通过比较FL_KEYDOWNthis进行测试),这是奇怪的。

任何帮助都将不胜感激。

Fl::focus()

2 个答案:

答案 0 :(得分:1)

使用FL_KEYDOWN是Windows的处理方式,正如您所发现的那样,因为您需要子类Fl_Input_:而不是Fl_Input,所以它不起作用,即便如此,它也无法正常工作。

相反,使用时(FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY)。按下键并且clear_changed()时检查changed()。按下回车键时不设置。您可以在满足条件时更改颜色。

data: arreglo.map(function (value) {
    return Number(value);
  })

答案 1 :(得分:0)

FLTK Google group做了回复,解释了问题......没有简单的解决方法......

  

FLTK直接向焦点小部件提供击键。 Fl_Value_Input   包含一个Fl_Input小部件,当您单击输入字段时,该小部件将成为焦点小部件。

     

因此,“父”Fl_Value_Input永远不会看到Fl_KEYDOWN事件。   请注意,我引用了“parent”,因为Fl_Value_Input是 very   特殊情况。它不是从Fl_Group派生的,但它表现得有点像   像一个Fl_Group小部件。

     

那么为什么派生的小部件会获得FL_KEYUP事件?那是另一个   FLTK的功能:FL_KEYUP事件也传递给焦点   小部件首先。但是,AFAICT没有核心FLTK小部件   处理FL_KEYUP事件 - 它们在句柄中都返回0()   方法。如果焦点小部件不处理FLTK尝试的事件   将它传递给父窗口小部件,然后通过窗口小部件   层次结构,直到它到达顶级窗口。因此(这   恕我直言,最终所有小部件都将收到所有FL_KEYUP事件   除非一个小部件从其handle()方法返回1(即   通常不是这种情况)。取决于焦点小部件的深度   整个窗口小部件层次结构可能是某些窗口小部件变得相同   FL_KEYUP事件多次,因为所有父组的焦点   小部件尝试将事件传递给他们所有的孩子。