fltk1.3按键更改Fl :: event_x()和Fl :: event_y()

时间:2018-09-23 14:43:02

标签: c++ fltk

我在程序中遇到错误,任何时候只要不处理按键操作,只要按键被按下,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);
}

0 个答案:

没有答案