12個のボタンを備えたキーパッドがあります。特定のボタンを押すと、すべてのボタンに別のラベルが付けられます。これを行うにはどうすればよいですか、目的のために配列を使用する必要があると思いますか?
1 に答える
1
はい、ボタンをある種のデータ構造に保存する必要があります。これをシグナル ハンドラー コールバックで使用できるようにする必要があります。
多くの場合、このような状態情報をすべて構造体にラップするのが最善です。
typedef struct {
GtkWidget *keypad[12];
} GuiData;
次に、構造体を 1 回、おそらく早い段階でインスタンス化しmain()
、それを渡します。
int main(void)
{
GuiData gui;
gui.keypad[0] = gtk_button_new_with_label("1");
/* ... */
g_signal_connect(G_OBJECT(some_widget), "clicked",
G_CALLBACK(cb_some_button_clicked), &gui);
}
&gui
「いくつかのボタン」のクリックを処理するために、コールバック関数に GUI 状態構造体へのポインターを渡すために使用される方法に注意してください。
コールバック内で、キーパッドにアクセスできます。
static void cb_some_button_clicked(GtkWidget *object, gpointer user)
{
GuiData *guidata = user;
gtk_button_set_label(GTK_LABEL(guidata->keypad[0], "4711");
}
私は今これを試していませんが、上記はおおよそ正しいはずです。
于 2013-04-30T09:08:20.980 に答える