27/01/13 14:59
Dante.cpp
Alla pressione di un qualsiasi bottone, la funzione viene chiamata ma la stringa but.lab è sempre vuota, infatti chiamando la funzione stampa solo \n...
#include <gtk/gtk.h> #include<stdlib.h> #include<time.h> typedef struct { GtkWidget *wid; char lab[2]; } Btn; //restituisce un carattere casuale seguito da /0... char *rand_character() { char * c = calloc( 2, sizeof(char)); c[0] = 'a' + rand() % ('z'-'a') ; c[1] = 'Alla pressione di un qualsiasi bottone, la funzione viene chiamata ma la stringa but.lab è sempre vuota, infatti chiamando la funzione stampa solo \n...
#include <gtk/gtk.h> #include<stdlib.h> #include<time.h> typedef struct { GtkWidget *wid; char lab[2]; } Btn; //restituisce un carattere casuale seguito da /0... char *rand_character() { char * c = calloc( 2, sizeof(char)); c[0] = 'a' + rand() % ('z'-'a') ; c[1] = '{parsed_message}'; return c; } static void grf_get_label( Btn but ) { printf("%s\n",but.lab); } //restituisce una tastiera 4*4 con dei caratteri aleatori come etichette, ad ogni pulsante è collegata //una funzione "grf_get_label" che stampa in stdout il carattere d'etichetta del bottone premuto. Grf grf_tastiera() { GtkWidget *table; Btn button[4][4]; int rows, cols; table = gtk_table_new (4, 4, TRUE); srand(time(NULL)); for ( rows = 0; rows < 4; rows++ ) for ( cols = 0; cols < 4; cols++ ) strcpy(button[rows][cols].lab, rand_character()); for ( rows = 0; rows < 4; rows++ ) for ( cols = 0; cols < 4; cols++ ) { button[rows][cols].wid = gtk_button_new_with_label(button[rows][cols].lab); gtk_table_attach (GTK_TABLE (table), button[rows][cols].wid, cols, cols + 1, rows, rows + 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 0, 0); g_signal_connect (G_OBJECT (button[rows][cols].wid), "clicked", G_CALLBACK (grf_get_label), &button[rows][cols]); } return table; } int main(int argc, char *argv[]) { Grf window; gtk_init (&argc, &argv); //finestra principale window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "Tastiera"); gtk_window_set_default_size(GTK_WINDOW(window) , 200 , 210); gtk_window_set_position (GTK_WINDOW (window) , GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (window), 9); //posiziona una tastiera 4*4 nella finestra gtk_container_add (GTK_CONTAINER (window), grf_tastiera()); gtk_widget_show_all (window); g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (gtk_main_quit), NULL);'; return c; } static void grf_get_label( Btn but ) { printf("%s\n",but.lab); } //restituisce una tastiera 4*4 con dei caratteri aleatori come etichette, ad ogni pulsante è collegata //una funzione "grf_get_label" che stampa in stdout il carattere d'etichetta del bottone premuto. Grf grf_tastiera() { GtkWidget *table; Btn button[4][4]; int rows, cols; table = gtk_table_new (4, 4, TRUE); srand(time(NULL)); for ( rows = 0; rows < 4; rows++ ) for ( cols = 0; cols < 4; cols++ ) strcpy(button[rows][cols].lab, rand_character()); for ( rows = 0; rows < 4; rows++ ) for ( cols = 0; cols < 4; cols++ ) { button[rows][cols].wid = gtk_button_new_with_label(button[rows][cols].lab); gtk_table_attach (GTK_TABLE (table), button[rows][cols].wid, cols, cols + 1, rows, rows + 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 0, 0); g_signal_connect (G_OBJECT (button[rows][cols].wid), "clicked", G_CALLBACK (grf_get_label), &button[rows][cols]); } return table; } int main(int argc, char *argv[]) { Grf window; gtk_init (&argc, &argv); //finestra principale window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "Tastiera"); gtk_window_set_default_size(GTK_WINDOW(window) , 200 , 210); gtk_window_set_position (GTK_WINDOW (window) , GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (window), 9); //posiziona una tastiera 4*4 nella finestra gtk_container_add (GTK_CONTAINER (window), grf_tastiera()); gtk_widget_show_all (window); g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (gtk_main_quit), NULL);
Ultima modifica effettuata da Dante.cpp 27/01/13 15:01
aaa