2011-12-02 51 views
0

我正在做一個板這樣知道哪個按鈕被按下了! GTK

GtkWidget *board[x][y]; 

如果我做按鈕的排列,我怎麼能知道哪個按鈕被按下?

是否陣列的

g_signal_connect(G_OBJECT(board[][]), "clicked", 
     G_CALLBACK(board_button_pressed), NULL); 
// I want to know what [][] they pressed, how could I verify/check this? 

回報哪個按鈕被按下?或者,我是否必須爲每個棋子單獨製作一個功能?

例如:

OOO 
OXO 
OOO 

如何知道哪個按鈕被按下,如果所有的按鈕被命名一樣嗎?

回答

2

最簡單的方法之一就是在連接到回調數據時發送信息。一些在這些線路上:

... 

typedef struct _identifier{ 
    int x; 
    int y; 
}identifier; 

static void button_clicked_cb(GtkButton *button, gpointer data) 
{ 
    (void)button; /*To get rid of compiler warning*/ 
    identifier *id = data; 
    printf("\n id = %d, %d\n", id->x, id->y); 
    return; 
} 
.... 
    identifier id[x*y]; /* Size of x*y of the board*/ 
    unsigned int counter = 0; 
    for (i = 0; i < x; i++) 
    { 
     for (j = 0; j < y; j++) 
     { 
      id[counter].x = i; 
      id[counter].y = j; 
      board[i][j] = gtk_button_new(); 
      g_signal_connect(board[i][j], "clicked", G_CALLBACK(button_clicked_cb), &id[counter]); 
      counter++; 
     }                                      
    } 

請注意:"clicked"信號只與GtkButton有關。如果您需要使用GtkWidget,請查看"button-press-event""button-release-event",在這種情況下,回調簽名也會發生變化。
希望這有助於!

+0

給我一秒,我會試試看,看看會發生什麼,感謝您的幫助! – drodri420

+0

我seee標識符* id =數據; 「數據」代表什麼? – drodri420

+0

'data'是傳遞給回調函數的參數。您可以設置使用'g_signal_connect'連接時要傳遞的數據 –

相關問題