⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtk_tut_it-7.html

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 HTML
📖 第 1 页 / 共 4 页
字号:
    GtkWidget *entry;    GtkWidget *button;    GtkWidget *check;    gtk_init (&amp;argc, &amp;argv);    /* creiamo una nuova finestra */    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);    gtk_widget_set_usize( GTK_WIDGET (window), 200, 100);    gtk_window_set_title(GTK_WINDOW (window), "GTK Entry");    gtk_signal_connect(GTK_OBJECT (window), "delete_event",                       (GtkSignalFunc) gtk_exit, NULL);    vbox = gtk_vbox_new (FALSE, 0);    gtk_container_add (GTK_CONTAINER (window), vbox);    gtk_widget_show (vbox);    entry = gtk_entry_new_with_max_length (50);    gtk_signal_connect(GTK_OBJECT(entry), "activate",                       GTK_SIGNAL_FUNC(enter_callback),                       entry);    gtk_entry_set_text (GTK_ENTRY (entry), "hello");    gtk_entry_append_text (GTK_ENTRY (entry), " world");    gtk_entry_select_region (GTK_ENTRY (entry),                             0, GTK_ENTRY(entry)->text_length);    gtk_box_pack_start (GTK_BOX (vbox), entry, TRUE, TRUE, 0);    gtk_widget_show (entry);    hbox = gtk_hbox_new (FALSE, 0);    gtk_container_add (GTK_CONTAINER (vbox), hbox);    gtk_widget_show (hbox);                                      check = gtk_check_button_new_with_label("Editable");    gtk_box_pack_start (GTK_BOX (hbox), check, TRUE, TRUE, 0);    gtk_signal_connect (GTK_OBJECT(check), "toggled",                        GTK_SIGNAL_FUNC(entry_toggle_editable), entry);    gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(check), TRUE);    gtk_widget_show (check);        check = gtk_check_button_new_with_label("Visible");    gtk_box_pack_start (GTK_BOX (hbox), check, TRUE, TRUE, 0);    gtk_signal_connect (GTK_OBJECT(check), "toggled",                        GTK_SIGNAL_FUNC(entry_toggle_visibility), entry);    gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(check), TRUE);    gtk_widget_show (check);                                       button = gtk_button_new_with_label ("Close");    gtk_signal_connect_object (GTK_OBJECT (button), "clicked",                               GTK_SIGNAL_FUNC(gtk_exit),                               GTK_OBJECT (window));    gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);    gtk_widget_grab_default (button);    gtk_widget_show (button);        gtk_widget_show(window);    gtk_main();    return(0);}</PRE></CODE></BLOCKQUOTE><P><H2><A NAME="ss7.9">7.9 Selettori di Colore</A></H2><P>Il widget selettore di colore &egrave; chiaramente un widget che permtte discegliere interattivamente dei colori. Questo widget composto permette all'utentedi selezionare un colore agendo su terne RGB (Red, Green, Blue) e HSV(Hue, Saturation, Value). Questo lo si pu&ograve; fare o agendo sui singoli valoritramite degli slider o inserendoli da tastiera, oppure selezionando direttamente ilcolore da un cerchio (valori H e S) e da una barra (valore V). Opzionalmente, &egrave; possibile anche stabilire il grado di trasparenza delcolore.Il widget di selezione di colore emette per ora un solo segnale, "color_changed", cheviene generato ogni volta che il colore corrente nel widget cambia, sia quando&egrave; l'utente a cambiarlo, sia quando viene modificato esplicitamente tramiteuna chiamata a gtk_color_selection_set_color().<P>Diamo ora un'occhiata a cosa ha da offrirci il widget di selezione di colore. Il widget &egrave; disponibile in due versioni, gtk_color_selection egtk_color_selection_dialog:<P><BLOCKQUOTE><CODE><PRE>GtkWidget *gtk_color_selection_new(void);</PRE></CODE></BLOCKQUOTE><P>E' probabile che non userete questo costruttore direttamente. Infatti esso crea unwidget GtkColorSelection orfano a cui dovrete assegnare un genitore voi stessi.Il widget GtkColorSelection  eredita dal widget GtkVBox. <P><BLOCKQUOTE><CODE><PRE> GtkWidget *gtk_color_selection_dialog_new(const gchar *title);</PRE></CODE></BLOCKQUOTE><P>Questo &egrave; il pi&ugrave; comune fra i costruttori di selettori di colore. Essocrea un GtkColorSelectionDialog, che eredita da GtkDialog. Esso consiste di unGtkFrame che contiene un widget GtkColorSelection, un GtkHSeparator e unGtkHBox con tre bottoni, "Ok", "Cancel" e "Help". Si arriva a questi bottoniaccedendo ai widget "ok_button", "cancel_button" e "help_button" nella struttura GtkColorSelectionDialog (cio&egrave;  (GTK_COLOR_SELECTION_DIALOG(colorseldialog)->ok_button).<P><BLOCKQUOTE><CODE><PRE>void gtk_color_selection_set_update_policy(GtkColorSelection *colorsel,                                            GtkUpdateType policy);</PRE></CODE></BLOCKQUOTE><P>Questa funzione stabilisce la politica di aggiornamento. Quella predefinita &egrave;GTK_UPDATE_CONTINOUS, che significa che il colore viene aggiornatocontinuamente mano a mano che l'utente trascina gli slider o preme e trascina ilmouse nel cerchio della hue-saturation o nella relativa barra. Se si hanno problemidi prestazioni, si pu&ograve; decidere di usare la politicaGTK_UPDATE_DISCONTINOUSo GTK_UPDATE_DELAYED.<P><BLOCKQUOTE><CODE><PRE>void gtk_color_selection_set_opacity(GtkColorSelection *colorsel,                                     gint use_opacity);</PRE></CODE></BLOCKQUOTE><P>Il widget di selezione di colore permette anche di variare l'opacit&agrave; di uncolore (conosciuta anche come canale alfa). Questa caratteristica &egrave; normalmente disabilitata. Chiamare la precedente funzione, con use_opacity ugualea TRUE abilita la manipolazione dell'opacit&agrave;. Analogamente, mettendouse_opacity uguale a FALSE la disabiliter&agrave;.<P><BLOCKQUOTE><CODE><PRE>void gtk_color_selection_set_color(GtkColorSelection *colorsel,                                   gdouble *color);</PRE></CODE></BLOCKQUOTE><P>Si pu&ograve; assegnare esplicitamente un colore chiamando questa funzionecon un puntatore ad un vettore di colori (gdouble). La lunghezza del vettoredipende dall'attivazione o meno del controllo dell'opacit&agrave;. La posizione 0contiene la componente rossa, la 1 \ il verde, la 2 il blu e la 3 contienel'opacit&agrave; (se questa \ attivata, come si &egrave; detto pergtk_color_selection_set_opacity()). Tutti i valori sono compresi fra 0.0 e 1.0.<P><BLOCKQUOTE><CODE><PRE>void gtk_color_selection_get_color(GtkColorSelection *colorsel,                                   gdouble *color);</PRE></CODE></BLOCKQUOTE><P>Questa funzione viene usata per ottenere il colore corrente, tipicamente quandosi &egrave; ricevuto il segnale "color_changed". Color &egrave; un puntatore alvettore di colori da riempire. Vedi la descrizione di questo vettore nella funzionegtk_color_selection_set_color().<P><P>Ecco un semplice esempio che mostra l'uso di  GtkColorSelectionDialog.Il programma mostra una finestra che contiene un'area di disegno. Cliccandocisopra, si apre un dialogo di selezione di colore, e se si modifica il colorenella finestra di dialogo verr&agrave; cambiato anche il colore dello sfondo.<P><BLOCKQUOTE><CODE><PRE>#include &lt;glib.h>#include &lt;gdk/gdk.h>#include &lt;gtk/gtk.h>GtkWidget *colorseldlg = NULL;GtkWidget *drawingarea = NULL;/* gestore del cambiamento del colore */void color_changed_cb (GtkWidget *widget, GtkColorSelection *colorsel){  gdouble color[3];  GdkColor gdk_color;  GdkColormap *colormap;  /* recupera la colormap dell'area di disegno */  colormap = gdk_window_get_colormap (drawingarea->window);  /* recupera il colore corrente */  gtk_color_selection_get_color (colorsel,color);  /* adattamento ad un intero unsigned di 16 bit (0..65535)   * e inseriscili nella struttura GdkColor */  gdk_color.red = (guint16)(color[0]*65535.0);  gdk_color.green = (guint16)(color[1]*65535.0);  gdk_color.blue = (guint16)(color[2]*65535.0);  /* Alloca il colore */  gdk_color_alloc (colormap, &amp;gdk_color);  /* assegna il colore di sfondo della finestra */  gdk_window_set_background (drawingarea->window, &amp;gdk_color);  /* pulisce la finestra */  gdk_window_clear (drawingarea->window);}/* gestore per l'area di disegno */gint area_event (GtkWidget *widget, GdkEvent *event, gpointer client_data){  gint handled = FALSE;  GtkWidget *colorsel;  /* controlliamo se abbiamo ricevuto un evento di pressione di pulsante */  if (event->type == GDK_BUTTON_PRESS &amp;&amp; colorseldlg == NULL)    {      /* Si , c'e' l'evento e ancora non c'e' alcun colorseldlg! */      handled = TRUE;      /* Creiamo una finestra di dialogo per la selezione del colore */      colorseldlg = gtk_color_selection_dialog_new("Select background color");      /* Otteniamo il widget GtkColorSelection */      colorsel = GTK_COLOR_SELECTION_DIALOG(colorseldlg)->colorsel;      /* Facciamo la connessione al segnale "color_changed",       * ed assegnamo i dati-utente al widget di selezione di colore */      gtk_signal_connect(GTK_OBJECT(colorsel), "color_changed",        (GtkSignalFunc)color_changed_cb, (gpointer)colorsel);      /* Mostriamo il dialogo */      gtk_widget_show(colorseldlg);    }  return handled;}/* Chiusura ed uscita dal getore */void destroy_window (GtkWidget *widget, gpointer client_data){  gtk_main_quit ();}/* Main */gint main (gint argc, gchar *argv[]){  GtkWidget *window;  /* Inizialliziamo il toolkit, remuoviamo gli argomenti sulla linea di   * comando legati a gtk */  gtk_init (&amp;argc,&amp;argv);  /* creiamo la finestra base, con titolo e politiche */  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);  gtk_window_set_title (GTK_WINDOW(window), "Color selection test");  gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, TRUE);  /* colleghiamo gli eventi "delete" e "destroy" per poter uscire */  gtk_signal_connect (GTK_OBJECT(window), "delete_event",    (GtkSignalFunc)destroy_window, (gpointer)window);  gtk_signal_connect (GTK_OBJECT(window), "destroy",    (GtkSignalFunc)destroy_window, (gpointer)window);    /* crea un'area di disegna, stabilisce le dimensioni e raccogli    * gli eventi */  drawingarea = gtk_drawing_area_new ();  gtk_drawing_area_size (GTK_DRAWING_AREA(drawingarea), 200, 200);  gtk_widget_set_events (drawingarea, GDK_BUTTON_PRESS_MASK);  gtk_signal_connect (GTK_OBJECT(drawingarea), "event",     (GtkSignalFunc)area_event, (gpointer)drawingarea);    /* aggiungi l'area di disegno alla finestra e mostrale entrambe */  gtk_container_add (GTK_CONTAINER(window), drawingarea);  gtk_widget_show (drawingarea);  gtk_widget_show (window);    /* entra nel ciclo principale di gtk (che non cede mai il controllo */  gtk_main ();  /* soddisfa i compilatori brontoloni */  return 0;}</PRE></CODE></BLOCKQUOTE><P><H2><A NAME="ss7.10">7.10 Selezione di File (File Selections)</A></H2><P>Il widget Selezione di File &egrave; un modo rapido e semplice per mostrare unafinestra di dialogo `File'. Questa si presenta completa di bottoni Ok,Cancel e Help, un buon modo per tagliare i tempi di programmazione.<P>Per creare una nuova finestra di selezione file usate:<P><BLOCKQUOTE><CODE><PRE>GtkWidget* gtk_file_selection_new (gchar *title);</PRE></CODE></BLOCKQUOTE><P>Per assegnare il nome del file, ad esempio per predisporre una certadirectory o per dare un certo nome di file per difetto, usate la seguentefunzione:<P><BLOCKQUOTE><CODE><PRE>void gtk_file_selection_set_filename (GtkFileSelection *filesel, gchar *filename);</PRE></CODE></BLOCKQUOTE><P>Per recuperare il testo che l'utente ha inserito o che ha selezionato conil mouse, si usa la funzione:<P><BLOCKQUOTE><CODE><PRE>gchar* gtk_file_selection_get_filename (GtkFileSelection *filesel);</PRE></CODE></BLOCKQUOTE><P>Ci sono anche dei puntatori ai widget che sono contenuti all'internodel widget di selezione file. Si tratta di:<P><UL><LI>dir_list</LI><LI>file_list</LI><LI>selection_entry</LI><LI>selection_text</LI><LI>main_vbox</LI><LI>ok_button</LI><LI>cancel_button</LI><LI>help_button</LI></UL><P>Molto probabilmente potreste voler usare i puntatori a ok_button,cancel_button e help_button per segnalarne l'uso.<P>Ecco un esempio rubato da testgtk.c, nodificato per essere eseguito dasolo. Come potrete vedere, non c'&egrave; molto pi&ugrave; che la creazione di unwidget di selezione file. In questo esempio, il bottone Help non fa nullamentre &egrave; mostrato allo schermo, dal momento che non c'&egrave; alcun segnalecollegato con esso. <P><BLOCKQUOTE><CODE><PRE>/* filesel.c */#include &lt;gtk/gtk.h>/* Recupera il nome di file selezionato e stampalo a console */void file_ok_sel (GtkWidget *w, GtkFileSelection *fs){    g_print ("%s\n", gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)));}void destroy (GtkWidget *widget, gpointer data){    gtk_main_quit ();}int main (int argc, char *argv[]){    GtkWidget *filew;        gtk_init (&amp;argc, &amp;argv);        /* Crea un nuovo widget di selezione file */    filew = gtk_file_selection_new ("File selection");        gtk_signal_connect (GTK_OBJECT (filew), "destroy",                        (GtkSignalFunc) destroy, &amp;filew);    /* Connette ok_button alla funzione file_ok_sel */    gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filew)->ok_button),                        "clicked", (GtkSignalFunc) file_ok_sel, filew );        /* Connette cancel_button alla funzione di distruzione del widget */    gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (filew)->cancel_button),                               "clicked", (GtkSignalFunc) gtk_widget_destroy,                               GTK_OBJECT (filew));        /* Preassegnamo un nome di file, come se stessimo dando un valore per difetto in     dialogo di tipo `` salva con nome '' */    gtk_file_selection_set_filename (GTK_FILE_SELECTION(filew),                                      "penguin.png");        gtk_widget_show(filew);    gtk_main ();    return 0;}</PRE></CODE></BLOCKQUOTE><P><HR NOSHADE><A HREF="gtk_tut_it-8.html">Avanti</A><A HREF="gtk_tut_it-6.html">Indietro</A><A HREF="gtk_tut_it.html#toc7">Indice</A></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -