在GTK + 3中,如何获得绘图区域以响应鼠标事件?

时间:2017-05-19 19:17:10

标签: c mouseevent gtk3 drawingarea

在GTK + 3中,如何让drawing_area响应鼠标事件?

main() 函数中,我声明了 drawing_area

g_signal_connect(drawing_area, "button-press-event", G_CALLBACK(clicked), NULL);

然后我用鼠标点击信号连接 drawing_area

static gboolean clicked(GtkWidget *widget, GdkEventButton *event, gpointer user_data)

    printf("Clicked! \n");

    return TRUE;
}

功能"点击"定义如下:

message("== INC: $$lo)")

程序运行并显示drawing_area但是当我点击它时,没有答案,没有任何反应!为什么会这样?

2 个答案:

答案 0 :(得分:4)

默认情况下,GtkDrawingArea似乎无法接收鼠标事件

查看documentation

  

要在绘图区域接收鼠标事件,您需要启用   他们使用gtk_widget_add_events()。要接收键盘事件,你   将需要在绘图区域设置“可以聚焦”属性,并且您   应该可能会绘制一些用户可见的绘图指示   区域是集中的。在您的公开事件中使用gtk_widget_has_focus()   处理程序,以决定是否绘制焦点指标。看到   gtk_render_focus()用于绘制焦点的一种方法。

或者尝试将事件"button-press-event"连接到窗口:

g_signal_connect(window, "button-press-event", G_CALLBACK(clicked), NULL);

而不是

g_signal_connect(drawing_area, "button-press-event", G_CALLBACK(clicked), NULL);

如本例所示:

http://zetcode.com/gfx/cairo/basicdrawing/

答案 1 :(得分:0)

一个完整的例子是: https://developer.gnome.org/gtk3/stable/ch01s05.html

它通过:: button-press和:: motion-notify处理程序演示了输入事件处理。