如何在 C++ FLTK 中处理同时向左和向右拖动

问题描述 投票:0回答:1

我正在使用FLTK 1.3.3,在实现

Fl_Widget::Handle()
功能时,我试图同时处理左键单击拖动和右键单击拖动,但是,我得到的事件不是我所期望的。当我同时按住左键和右键,然后释放其中一个,然后继续拖动时,就会出现问题。我仍在单击拖动,但收到了 FL_MOVE。

行动左键单击向下右键向下拖动左键单击向上更拖拉> FL_MOVE 右键向上
预期事件 实际事件
FL_PUSH FL_PUSH
FL_PUSH FL_PUSH
FL_拖动 FL_拖动
FL_RELEASE FL_RELEASE
FL_拖动 <
FL_RELEASE FL_RELEASE
这会阻止我的代码正常工作,因为我仍然按住单击并拖动,但事件并不代表它。

这是说明该问题的代码示例:

#include <FL/Fl.H> #include <FL/Fl_Window.H> #include <FL/Fl_Widget.H> #include <FL/names.h> // fl_eventnames[] #include <FL/fl_draw.H> #include <stdio.h> class MyWidget : public Fl_Widget { public: MyWidget(int X,int Y,int W,int H) : Fl_Widget(X,Y,W,H) { } int handle(int event) { int ret = Fl_Widget::handle(event); // let Fl_Widget access events too printf("Event was %s (%d)\n", fl_eventnames[event], event); // For illustrating the bug. switch(event) { case FL_ENTER: return 1; case FL_PUSH: if (Fl::event_button()>1) printf("Right Click\n"); else printf("Left Click\n"); return 1; case FL_DRAG: return 1; case FL_RELEASE: return 1; case FL_MOVE: return 1; } return ret; // return Fl_Widget::handle()'s value } void draw() { fl_color(color()); fl_rectf(x(),y(),w(),h()); } }; int main() { Fl_Window win(300,300); MyWidget widget(10,10,100,100); widget.color(FL_RED); win.show(); return Fl::run(); }

如何正确跟踪同时左右拖动?最好通过 FLTK 本身,而不是通过使用自定义代码跟踪保持的点击来解决它。

c++ fltk
1个回答
0
投票

该问题已在即将发布的 FLTK 1.4.0 中得到修复。您可以从 FLTK 下载页面下载当前快照或使用 git(分支

master

)。

FLTK 1.3.9 仍然显示该错误(并且不会修复)。

© www.soinside.com 2019 - 2024. All rights reserved.