0

ボタンでグリッドを作成したい。ボタンをクリックすると色が変わり、ボタンの現在の状態に応じて 0 または 1 が配列に格納されます。

これを行うには、2 つの for ループ (行と列) を持つボタンを作成します。for ループの内部。

/*Create an ID number for the button being created*/
btn_nr ++;
char btn_nr_str[3];
sprintf(btn_nr_str,"%d",btn_nr); //convert nr to string

/*Create button*/
button = gtk_button_new();

/* When the button is clicked, we call the "callback" function
 * with a pointer to the ID */
gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (callback)(gpointer) btn_nr_str);

/* Insert button into the table */
gtk_table_attach_defaults (GTK_TABLE(table), button, col, col+1, row, row+1);
gtk_widget_show (button);

コールバック関数;

void callback( GtkWidget *widget, gpointer nr)
{
    GdkColor buttonColor;
    gdk_color_parse ("black", &buttonColor);
    gtk_widget_modify_bg ( GTK_WIDGET(widget), GTK_STATE_NORMAL, &buttonColor);
    g_print ("Hello again - %s was pressed\n", (char *) nr);
}

ボタンは思い通りに作成され、クリックすると黒くなります。ただし、すべてのボタンは、最後に作成されたボタンの ID を出力します。

正しい ID を渡すにはどうすればよいですか?

4

1 に答える 1