我在程序中遇到错误,任何时候只要不处理按键操作,只要按键被按下,Fl :: event_x()和Fl :: event_y()的返回值都会改变。保持。有趣的是,这些值从几十到几百不等,具体取决于我在屏幕上窗口的位置。具体来说,窗口在我的屏幕上越靠左或越靠上,分别改变x和y值的差异就越小。同样,窗口越靠右或越靠下,x和y值变化的差异就越大。我的鼠标在窗口上的位置对差异没有影响。最后,更改后的值始终低于未更改的值。
例如,给定特定的窗口位置,如果Fl :: event_x()在不按住任何键的情况下返回100,则在保留任何未处理的键的情况下将返回17。 Fl :: event_y()的工作方式与此类似。
如何抑制这种不良行为?
我认为这不相关,因为我将添加我的代码。
int EditBox :: handle(int事件)
int SME::EditBox::handle(int event)
{
std::cout << Fl::event_x() << "," << Fl::event_y() << std::endl;
// was the event used?
int used = 0;
if(hover_editbox(Fl::event_x(), Fl::event_y())) {
update_editinfo(Fl::event_x(), Fl::event_y());
static int x_origin = 0;
static int y_origin = 0;
switch(event)
{
case FL_PUSH:
x_origin = Fl::event_x();
y_origin = Fl::event_y();
used = 1;
break;
case FL_DRAG:
{
int dx = Fl::event_x() - x_origin;
int dy = Fl::event_y() - y_origin;
m_ox -= dx;
m_oy -= dy;
x_origin = Fl::event_x();
y_origin = Fl::event_y();
damage(FL_DAMAGE_ALL);
used = 1;
break;
}
case FL_MOUSEWHEEL:
if(Fl::event_dy() != 0) {
zoom(Fl::event_dy(), Fl::event_x(), Fl::event_y());
damage(FL_DAMAGE_ALL);
used = 1;
break;
}
case FL_FOCUS:
std::cout << "focus\n";
used = 1;
break;
case FL_UNFOCUS:
std::cout << "unfocus\n";
used = 1;
break;
case FL_KEYDOWN:
if(Fl::event_key() == ' ') {
m_ox = 0;
m_oy = 0;
damage(FL_DAMAGE_ALL);
used = 1;
}
break;
default:
break;
}
}
return used;
}
int EditorWindow :: handle(int事件)
int SME::EditorWindow::handle(int event)
{
return Fl_Window::handle(event);
}