在cairo上下文中的鼠标事件

时间:2013-06-28 08:29:51

标签: c++ user-interface cairo gtkmm gtk3

我正在开发一个使用C ++和GTK3的应用程序但是我被困了。我创建了一个带有glade的视觉应用程序,它有三列,其中一列是中间的,是DrawingArea。在那个DrawingArea中,我想在按下按钮后在我想要的点画一些圆圈,并在那些圆圈上有不同的鼠标事件(如拖放,双击,右击......)。我在official documentation之后做了第一件事(按下按钮后画了一个圆圈),但问题是我不知道如何做鼠标事件,但我想到了它,我有一些不同的解决方案(我不知道它们是最佳解决方案还是更好):

  1. 我认为最好的方法是为cairomm上下文创建一个信号,但我没有看到任何可以做到的事情。也许就是创建一个cairo表面或类似的东西。

  2. 每次点击创建一个圆圈,我都必须创建一个gtk小部件,我可以在其中处理鼠标事件。这里的问题是小部件需要具有圆形形状并且需要是可绘制的。是否可以创建一个循环的DrawingArea?这可能是最好的。我看到了创建自定义小部件的方法here

  3. 使用goocanvasmm。这里的问题是goocanvasmm有一些文档(对不起,由于我的声誉,我不能发布两个以上的链接),我认为这不是最好的解决方案,我更喜欢使用cairomm。

  4. 这个应用程序是用C语言编写的,使用GTK2绘制,并使用gnomecanvas绘制圆圈,以简单的方式为每个圆圈添加信号;现在我将这个应用程序转移到C ++和GTK3来更新它。

    我对GTK(以及一般的图形界面)非常陌生,但我寻找了几个小时的解决方案,我不知道继续工作的最佳方式是什么。

    感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

最好使用画布库,例如GooCanvas。单独使用cairo需要您在整个绘图区域上听鼠标事件,并跟踪圆圈的位置以确定鼠标事件属于哪个圆圈 - 这正是画布库已经解决的问题你。

如果您在使用goocanvasmm文档时遇到问题,那么查看documentation for GooCanvas' C API以及C API如何转换为C ++的知识通常就足够了。虽然GooCanvasmm documentation对我来说似乎相当广泛。