C(99) gtk   02 - disporre gli oggetti
Upcoming SlideShare
Loading in...5
×
 

C(99) gtk 02 - disporre gli oggetti

on

  • 132 views

Come disporre gli oggetti nelle GTK, uno sguardo sui principali metodi di disposizione :

Come disporre gli oggetti nelle GTK, uno sguardo sui principali metodi di disposizione :
HBox-VBox
Fixed
Table

Statistics

Views

Total Views
132
Views on SlideShare
132
Embed Views
0

Actions

Likes
0
Downloads
4
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

C(99) gtk   02 - disporre gli oggetti C(99) gtk 02 - disporre gli oggetti Presentation Transcript

  • * http://corsogtk.chipsy.it/ Disporre gli oggetti
  • *
  • * 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 sianodisposti in maniera omogenea.Il secondo parametro è lo spazio che deve esserci tra un oggetto el’altro.Dentro questi widget possiamo metterci tutti i widget che vogliamo eanche altri hbox o vbox.Volendo si potrebbe benissimo creare una tabella di hbox e vbox, manon 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 laseconda 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 HBOX4. Il quarto parametro che funziona solo se il terzo è TRUE, riempie anche nell’altra dimensione5. 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,FALSEgli altri con gli argomentiTRUE,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 inserireE 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 lerighe con la stessa altezza e tutte le colonne con la stessalarghezza.Per inserire :gtk_table_attach_defaults(tabella, widget, colonna_a,colonna_b, riga_a, riga_b );Primo e secondo parametro son contenitore e widget dainserire.Terzo e quarto parametro tra quali colonne deve stare(si potete mettere un widget che occupa anche più diuna colonna)Quinto e sesto tra quali righe.
  • * Ultima cosa sulle tabelle :Se vogliamo impostare lo spazio che deve esserci tra unariga 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 lhbox 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, lhbox 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;}