在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但是当我点击它时,没有答案,没有任何反应!为什么会这样?
答案 0 :(得分:4)
默认情况下,GtkDrawingArea似乎无法接收鼠标事件
要在绘图区域接收鼠标事件,您需要启用 他们使用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);
如本例所示:
答案 1 :(得分:0)
一个完整的例子是: https://developer.gnome.org/gtk3/stable/ch01s05.html
它通过:: button-press和:: motion-notify处理程序演示了输入事件处理。