0

g_signal_connectの最後の引数はポインターである必要があるため、コールバック関数に渡される整数を取得するのに最も苦労しています。信号をコールバックに接続する場所は次のとおりです。

for (i=0;i<10;i++)
{

    ...
    gtk_widget_set_events(tab_ebs[i],GDK_BUTTON_PRESS_MASK);
    g_signal_connect (G_OBJECT (tab_ebs[i]), "button_press_event", G_CALLBACK (tab_clicked_cb), GINT_TO_POINTER(i));

}

コールバックは次のとおりです。

void tab_clicked_cb (gpointer p)
{
    printf("tab #%d clicked\n", GPOINTER_TO_INT(p));
}

stdout で得られるのは、次のようなステートメントです。

tab #6578976 clicked
tab #6579264 clicked
tab #6579552 clicked
tab #6579840 clicked

タブが10個しかないとき。64 ビット システムで整数をコールバック fcn に渡すにはどうすればよいですか? ありがとう。

4

2 に答える 2

2

いいえ、私は途中まで行きました。コールバック関数のイベントの引数も欠落していたことがわかりました。機能したフォームは次のとおりです。

void tab_clicked (GtkWidget *widget, GdkEventButton *ev, gpointer p)
{
    printf("tab #%d clicked\n", GPOINTER_TO_INT(p));
}
于 2012-12-09T02:18:24.330 に答える
0

ほとんどの Gtk コールバック ハンドラは、イベントを発生させたウィジェットを最初のパラメータとしてコールバック関数に渡します。だからそれは例えばあるべきです

void tab_clicked_cb (GtkWidget *widget, gpointer p)
{
    printf("tab #%d clicked\n", GPOINTER_TO_INT(p));
}

編集、Gtkドキュメントは、button_press_event のコールバック ハンドラが何であるかについてまったく明確ではありません。button_press_event のコールバック ハンドラとして読み取られたドキュメントは、引数を受け取りません。

于 2012-12-08T23:24:17.197 に答える