C语言 如何将光标运动信号连接到函数 (GTK)



我正在使用GTK库编写一个C程序,该程序读取光标的位置并将其写出到另一个函数。 我已经编写了能够准确读取光标位置数据的代码,但我无法弄清楚如何将光标运动事件连接到函数。

这是我到目前为止的代码:

int main(int argc, char **argv){
    GdkWindow *window;
    GtkWidget *gtk_window;
    GdkDevice *mouse;
    gint x = 0;
    gint y = 0;
    gdk_init(&argc, &argv);
    gtk_init(&argc, &argv);

    gtk_window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_widget_show(gtk_window);    
    window = gtk_widget_get_window(GTK_WIDGET(gtk_window));
    gdk_window_maximize(window);
    gdk_window_set_title(window, "write-mouse");
    GdkSeat *seat = gdk_display_get_default_seat (gdk_display_get_default ());
    mouse = gdk_seat_get_pointer (seat);
    gdk_window_get_device_position (window, mouse, &x, &y, NULL);
    //read cursor position at startup to test code
    g_print("X = %dn", x);
    g_print("Y = %dn", y);
    //g_signal_connect (mouse, "something?", G_CALLBACK (print_mouse), NULL);
    gtk_main();
}
static void print_mouse(GdkDevice *mouse, gpointer data){
    gint x = 0;
    gint y = 0;
    //do I need to pass the window object to "print_mouse" function too?
    //can I point to it using some gtk function?
    gdk_window_get_device_position (window, mouse, &x, &y, NULL);
    g_print("X = %dn", x);
    g_print("Y = %dn", y);
}

我假设我需要使用"g_signal_connect(("将光标运动事件连接到"print_mouse"函数,但我无法弄清楚要放置什么作为参数以使其工作。

我应该在"g_signal_connect(("的"detailed_signal"字段中输入什么?

有没有更好的方法来完全做到这一点?

你的是"motion-notify-event",它以GdkEventMotion事件的形式提供数据:https://developer.gnome.org/gtk2/stable/GtkWidget.html#GtkWidget-motion-notify-event

我认为您还需要确保在构建小部件时gtk_widget_add_events(widget,GDK_POINTER_MOTION_MASK(。出于性能原因,您可能希望将其设置为仅以特定的刷新率运行代码,以免使 CPU 负担过重。

最新更新