C GTK3:获取鼠标滚动方向
我刚刚将一个C程序从GTK2移植到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的滚动事件 使用滚轮后,将调用信号
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
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
顺便说一句:我在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。