我目前正在尝试使用 C 学习 GTK+3/cairo。我编写了一个小应用程序,它使用 cairo 在 gtk 绘图区域上绘制仪表面和针。
到目前为止效果很好,我尝试创建多个绘图区域(多个仪表),它们都具有相同的绘图事件回调函数,这也适用于静态值。
现在我的问题是,我希望能够绘制多个仪表,每个仪表都有自己的值。但是我如何在我的回调函数中知道哪个仪表(绘图区域)发出了绘图信号?我想这还包括我如何为仪表“创建和存储”数据,以便可以从绘图回调中获取它们的属性。
我可能应该创建一个包含仪表数据的结构,并创建多个。这就是我通过查看使用 GTK 的各种项目所收集到的信息,但它对我来说太复杂了,无法完全理解它是如何工作的。
这就是我创建绘图区域的方式:
gaugearea1 = gtk_drawing_area_new();
gtk_box_pack_start(GTK_BOX(hbox), gaugearea1, FALSE, FALSE, 5);
gtk_widget_set_size_request(gaugearea1, 300, 300);
gtk_widget_realize(gaugearea1);
g_signal_connect(gaugearea1, "draw", G_CALLBACK(draw_event), NULL);
而且回调函数是这样写的,很标准。
static gboolean draw_event(GtkWidget *widget, cairo_t *cr)
{
GdkWindow *win;
win = gtk_widget_get_window(widget);
// Draw all arcs/lines using cr
}
任何有关如何处理此类问题的提示将不胜感激。