C 如何在GTK3中处理鼠标运动事件?

C 如何在GTK3中处理鼠标运动事件?,c,mouseevent,gtk3,cairo,C,Mouseevent,Gtk3,Cairo,我正在尝试使用C/GTK3/CAROO实现以下功能: -左键单击GtkDrawingArea小部件并打印坐标Xo和Yo -按住左键的同时,移动鼠标并绘制一条线连接(Xo,Yo)到当前鼠标位置 -释放鼠标左键并打印(“某物”) 我该怎么做?有谁知道一个很好的教程展示了如何处理鼠标点击移动事件 到目前为止,我发现最好的是这个zetcode(它显示了如何处理鼠标点击事件,而不是向下/移动/向上按钮),它解释了当鼠标悬停在小部件上时如何更改鼠标光标 谢谢你从Gtk的人那里看到了吗?这是用C写的,但是是同

我正在尝试使用C/GTK3/CAROO实现以下功能:

-左键单击GtkDrawingArea小部件并打印坐标Xo和Yo

-按住左键的同时,移动鼠标并绘制一条线连接(Xo,Yo)到当前鼠标位置

-释放鼠标左键并打印(“某物”)

我该怎么做?有谁知道一个很好的教程展示了如何处理鼠标点击移动事件

到目前为止,我发现最好的是这个zetcode(它显示了如何处理鼠标点击事件,而不是向下/移动/向上按钮),它解释了当鼠标悬停在小部件上时如何更改鼠标光标

谢谢

你从Gtk的人那里看到了吗?这是用C写的,但是是同一个程序。遗憾的是,它的格式不是很好

无论如何,在构造函数(
\uuuu init\uuuu
)中,调用连接到
运动通知事件

您还需要连接到按钮按下事件和按钮释放事件

然后,按下按钮,保存起点的坐标(并保存到终点,目前相同)

在每个motion_notify_事件中,删除上一行(通过覆盖),并将其重新绘制到新的端点

最后,当按钮被释放时,该行是最终的

如果您使用画布小部件(例如,它负责大部分更新)会容易得多。您只需更新线条对象的坐标,它就会自动移动。此外,您还可以轻松删除线条。“算法”与上面类似:

  • 按钮\按下\事件
    按钮\释放\事件
    运动\通知事件
    连接到画布
  • 当按下按钮时,创建一个
    GooCanvas.polyline
    对象,并设置开始和结束
  • 在每个
    motion\u notify\u事件上更新端点
  • 使用
    按钮\u释放\u事件完成

通过第一个链接,您应该能够执行步骤1和3。如果这还不够,请提供显示问题的信息。对于步骤2,您需要保存按下按钮的位置,然后处理鼠标任何移动的
“运动通知事件”