Date post: | 27-Jun-2015 |
Category: |
Documents |
Upload: | maurizio-carboni |
View: | 89 times |
Download: | 1 times |
*
*Dato che inserendo tanti oggetti nella finestra uno dopo l’altro quello che otterremo sarebbe una disposizione totalmente insensata e brutta da vedere, son nati per questo vari widget il cui unico scopo è aiutarci a disporre gli elementi :
*I BOX : HBOX e VBOX servono per disporre al loro interno i widget in maniera ordinata e in una delle due direzioni scelte (orizzontale o verticale)
*FIXED, dentro questo elemento possiamo mettere dei widget in delle coordinate precise, possiamo disporli anche uno sopra l’altro, per creare un gioco è il migliore.
*
*Per creare questi 2 widget dobbiamo usare :
mio_h_oggetto = gtk_hbox_new(gboolean homogeneous, gint spacing);
mio_v_oggetto = gtk_vbox_new(gboolean homogeneous, gint spacing);
Il primo parametro è se vogliamo che gli oggetti al suo interno siano
disposti in maniera omogenea.
Il secondo parametro è lo spazio che deve esserci tra un oggetto e
l’altro.
Dentro questi widget possiamo metterci tutti i widget che vogliamo e
anche altri hbox o vbox.
Volendo si potrebbe benissimo creare una tabella di hbox e vbox, ma
non avrebbe senso visto che esiste già il widget table.
Dopo averli creati sicuramente vorremmo inserirci del contenuto dentro. Per fare questo dobbiamo usare le funzioni (identiche in entrambi) :
gtk_box_pack_start(GTK_BOX(HVBOX), widget, espandi, riempi, 0);
gtk_box_pack_end(GTK_BOX(HVBOX), widget, espandi, riempi, 0);
La prima funzione inserisce un widget all’inizio del contenitore, mentre la seconda lo inserisce alla fine.
1. Il primo parametro è il contenitore in cui vogliamo mettere il widget, deve essere fatto il cast a GTK_BOX visto che è il padre dei due fratellini HBOX e VBOX.
2. Il secondo parametro è il widget che vogliamo mettere nel contenitore.
3. Il terzo parametro è un gboolean (TRUE / FALSE) e indica se vogliamo che l’elemento riempia il contenitore in larghezza nelle VBOX e in altezza nelle HBOX
4. Il quarto parametro che funziona solo se il terzo è TRUE, riempie anche nell’altra dimensione
5. Il quinto parametro è quanto spazio deve esserci tra il widget e il contenitore (in ogni dimensione)
*In questa immagine il primo bottone è
stato inserito con gli argomenti TRUE,FALSE
gli altri con gli argomenti
TRUE,TRUE
*
*Questo è il componente che più è consigliato per la realizzazione di giochi in cui abbiamo degli oggetti in movimento.
Per crearlo dobbiamo usare :
contenitore_fixed = gtk_fixed_new();
*E per inserire oggetti al suo interno :
gtk_fixed_put(contenitore_fixed,widget,x,y);
Il primo parametro è il contenitore in cui inserire il widget,
Il secondo il widget da inserire
E il terzo e quarto le coordinate.
Analogamente per spostare un widget :
gtk_fixed_move(contenitore_fixed,widget,x,y);
*
* Le tabelle, beh non c’è bisogno di spiegare cosa sono, vediamo un po’ come usarle :
Crearle :
tabella = gtk_table_new(righe, colonne, OMOGENEA);
Primo e secondo parametro son il numero di righe e colonne.
Il terzo parametro è se deve essere omogenea, ovvero tutte le righe con la stessa altezza e tutte le colonne con la stessa larghezza.
Per inserire :
gtk_table_attach_defaults(tabella, widget, colonna_a, colonna_b, riga_a, riga_b );
Primo e secondo parametro son contenitore e widget da inserire.
Terzo e quarto parametro tra quali colonne deve stare (si potete mettere un widget che occupa anche più di una colonna)
Quinto e sesto tra quali righe.
*Ultima cosa sulle tabelle :
Se vogliamo impostare lo spazio che deve esserci tra una
riga e l’altra usiamo :
gtk_table_set_row_spacings(tabella, 2);
Tra una riga e l’altra :
gtk_table_set_col_spacings(tabella, 2);
*
*
#include <gtk/gtk.h>
int main(int argc,char *argv[]) {
GtkWidget *win,*hbox,*vbox;
//Inizializzo le GTK
gtk_init (&argc, &argv);
//Creo la finestra
win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
//Creo un vbox
vbox = gtk_vbox_new(TRUE, 20);
//Inserisco dentro il vbox una label, le vedremmo più avanti
gtk_box_pack_start(GTK_BOX(vbox), gtk_label_new("Sopra"), TRUE, TRUE, 0);
//Creo un hbox
hbox = gtk_hbox_new(TRUE, 50);
//Inserisco dentro l'hbox due label, le vedremmo più avanti
gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("Sinistra"), TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("Destra"), TRUE, TRUE, 0);
//Inserisco dentro il vbox, l'hbox
gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
//Inserisco il vbox dentro la finestra
gtk_container_add(GTK_CONTAINER(win),vbox);
//Mostro la finestra e tutto il suo contenuto
gtk_widget_show_all(win);
//Avvio il loop principale delle GTK
gtk_main ();
return 0;
}
*
#include <gtk/gtk.h>
int main(int argc,char *argv[]) {
GtkWidget *win,*tabella;
int i,j;
char s[4][4][2] = {{"7","8","9","+"},{"4","5","6","-"},{"1","2","3","*"},{".","0","%","/"}};
//Inizializzo le GTK
gtk_init (&argc, &argv);
//Creo la finestra
win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
//Creo una tabella 4x4
tabella = gtk_table_new(4, 4, TRUE);
//La riempio con dei label
for (i=0;i<4;i++)
for (j=0;j<4;j++)
gtk_table_attach_defaults(tabella, gtk_button_new_with_label(s[j][i]), i, i+1, j, j+1 );
//Inserisco la tabella dentro la finestra
gtk_container_add(GTK_CONTAINER(win),tabella);
//Mostro la finestra e tutto il suo contenuto
gtk_widget_show_all(win);
//Avvio il loop principale delle GTK
gtk_main ();
return 0;
}
*
#include <gtk/gtk.h>
int main(int argc,char *argv[]) {
GtkWidget *win,*fixed;
int i;
//Inizializzo le GTK
gtk_init (&argc, &argv);
//Creo la finestra
win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
//Imposto le dimensione della finestra
gtk_widget_set_size_request (win,640,480);
//Creo un fixed
fixed = gtk_fixed_new();
//Ci metto dei label in posizioni a caso
for (i=0;i<10;i++)
gtk_fixed_put(fixed,gtk_label_new("Ciao!"),rand()%640,rand()%480);
//Inserisco il fixed dentro la finestra
gtk_container_add(GTK_CONTAINER(win),fixed);
//Mostro la finestra e tutto il suo contenuto
gtk_widget_show_all(win);
//Avvio il loop principale delle GTK
gtk_main ();
return 0;
}