C-如何处理GTK3中的鼠标运动事件



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

- 左单击 gtkdrawingarea 窗口小部件并printf坐标xo和yo。

- 保持左键向下,移动鼠标并绘制线将线(XO,YO(绘制到当前鼠标位置。

- 释放左鼠标按钮和printf("某物"(

我该怎么做?有人知道一个很好的教程,展示了如何处理鼠标clicl-move事件吗?

到目前为止,我发现最好的是此ZetCode线(它显示了如何处理鼠标点击事件,但不显示按钮/移动/按钮,这说明了如何在悬停窗口小部件时更改鼠标光标。

谢谢

您是否从GTK People中看到了这个GTKDrawingArea演示?这是用C编写的,但是有一个同一程序的Python版本(链接更新 - 谢谢@KyUuhachi(。

无论如何,在构造函数(__init__(中,呼叫连接到motion_notify_event

您还需要连接到button_press_eventbutton_release_event

然后,按下按钮,您可以保存起点的坐标。(并将其保存到终点,现在相同(。

在每个Motion_notify_event上,您可以删除上一行(通过覆盖(,然后将其重新绘制到新的终点。

最后,当按钮发布时,该行是最终的。

如果您使用帆布小部件,例如Goocanvas,它会更容易,它会照顾大多数更新。您只需更新行对象的坐标,它将自动移动。另外,您可以轻松删除线条。"算法"与上述类似:

  • button_press_eventbutton_release_eventmotion_notifyevent连接到画布,
  • 按下按钮发生时,创建一个GooCanvas.polyline对象,然后设置"开始"one_answers"端点"
  • 更新每个motion_notify_event上的端点
  • button_release_event最终确定。

最新更新