Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C GTK3:获取鼠标滚动方向_C_Gtk_Gtk3 - Fatal编程技术网

C GTK3:获取鼠标滚动方向

C GTK3:获取鼠标滚动方向,c,gtk,gtk3,C,Gtk,Gtk3,我刚刚将一个C程序从GTK2移植到GTK3。程序使用鼠标滚轮所在的GtkDrawingArea。切换到GTK3后,我无法再正确检测滚轮的使用情况。以下是我所做和得到的: GTK2(2.24.10) 我将GtkDrawingArea的事件掩码设置为GDK_曝光|掩码| GDK_指针|运动|掩码| GDK_指针|运动|提示|掩码| GDK|按钮|按下|掩码| GDK|按钮|释放|掩码| GDK|离开|通知|掩码 我将一个信号处理程序连接到GtkDrawingArea的滚动事件 使用滚轮后,将调用信号

我刚刚将一个C程序从GTK2移植到GTK3。程序使用鼠标滚轮所在的
GtkDrawingArea
。切换到GTK3后,我无法再正确检测滚轮的使用情况。以下是我所做和得到的:

GTK2(2.24.10)

  • 我将
    GtkDrawingArea
    的事件掩码设置为
    GDK_曝光|掩码| GDK_指针|运动|掩码| GDK_指针|运动|提示|掩码| GDK|按钮|按下|掩码| GDK|按钮|释放|掩码| GDK|离开|通知|掩码
  • 我将一个信号处理程序连接到
    GtkDrawingArea
    滚动事件
  • 使用滚轮后,将调用信号处理程序,
    GdkEventScroll
    的属性
    direction
    GDK\u scroll\u UP
    GDK\u scroll\u DOWN
  • GTK3(3.4.2)

  • 除上述内容外,我还在
    GtkDrawingArea
    的事件掩码中包括
    GDK\u平滑\u滚动\u掩码。没有它,我的信号处理器就永远不会被调用
  • 我使用与上述相同的信号处理程序
  • 使用滚轮后,将调用信号处理程序,
    GdkEventScroll
    的属性
    direction
    GDK\u scroll\u SMOOTH
    。调用
    gdk\u event\u get\u scroll\u delta()
    时,无论是
    delta\u x
    还是
    delta\u y
    ,我都会得到0。我从来没有看到过任何其他方向,除了
    GDK\u SCROLL\u SMOOTH
  • 虽然我的鼠标本身只发送“离散”按钮4/5事件,但我可以接受平滑滚动事件,但我如何确定滚动事件的方向


    顺便说一句:我在amd64上使用的是Ubuntu 12.04。

    Gtk3中有一个与“滚动事件”信号相关的命令。首先,在回调中,应该使用GdkEventScroll结构的delta_x和delta_y成员。第二,第一次滚动鼠标时,这些成员都将为零(bug!)。随后的滚动将为您提供正确的值。第三,不幸的是,这个错误似乎无法修复。

    我发现了一个错误,但是这里没有提到delta_x和delta_y为0的问题。您是否尝试添加GDK_SCROLL_掩码?假设你不在乎平滑滚动,那就是。参见@ergosys:Yes,我包括了
    GDK\u SCROLL\u MASK
    (参见GTK3下的1)。如果没有这个标志,我的信号处理器永远不会在GTK3下调用。我不知道你在哪里调用。您有GDK_SMOOTH_SCROLL_掩码,这是另一个掩码。对不起,我从您的回复中误读了常量名称。我添加了
    GDK\u SCROLL\u MASK
    ,但没有任何区别。我仍然只收到
    GDK\u SCROLL\u SMOOTH
    事件。感谢您指出这一点。然而,在我的测试中,delta_x和delta_y始终为0,而不仅仅是第一个事件。无论如何,我放弃了寻找问题的根源,转而使用GDK_SCROLL_up/DOWN而不是GDK_SCROLL_SMOOTH。