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

📄 gtk_tut_it-9.html

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 HTML
📖 第 1 页 / 共 2 页
字号:
     */    gtklist=gtk_list_new();    gtk_container_add(GTK_CONTAINER(scrolled_window), gtklist);    gtk_widget_show(gtklist);    gtk_signal_connect(GTK_OBJECT(gtklist),                       "selection_changed",                       GTK_SIGNAL_FUNC(sigh_print_selection),                       NULL);        /* creiamo una "Prigione" (Prison) in cui mettere gli elementi di lista ;)     */    frame=gtk_frame_new("Prison");    gtk_widget_set_usize(frame, 200, 50);    gtk_container_border_width(GTK_CONTAINER(frame), 5);    gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_OUT);    gtk_container_add(GTK_CONTAINER(vbox), frame);    gtk_widget_show(frame);        /* connette il gestore di segnale sigh_button_event() alla GtkList     * il quale gestira' l'"imprigionamento" degli elementi di lista     */    gtk_signal_connect(GTK_OBJECT(gtklist),                       "button_release_event",                       GTK_SIGNAL_FUNC(sigh_button_event),                       frame);        /* crea un separatore     */    separator=gtk_hseparator_new();    gtk_container_add(GTK_CONTAINER(vbox), separator);    gtk_widget_show(separator);        /* infine creiamo un bottone e connettiamone il segnale "clicked"     * alla distruzione della finestra     */    button=gtk_button_new_with_label("Close");    gtk_container_add(GTK_CONTAINER(vbox), button);    gtk_widget_show(button);    gtk_signal_connect_object(GTK_OBJECT(button),                              "clicked",                              GTK_SIGNAL_FUNC(gtk_widget_destroy),                              GTK_OBJECT(window));            /* a questo punto creiamo 5 elementi di lista, ognuno con la     * propria etichetta, e li aggiungiamo alla GtkList usando     * gtk_container_add(). Inoltre, recuperiamo la stringa di testo     * dall'etichetta e la associamo, per ogni elemento, a     * list_item_data_key     */    for (i=0; i&lt;5; i++) {        GtkWidget       *label;        gchar           *string;                sprintf(buffer, "ListItemContainer with Label #%d", i);        label=gtk_label_new(buffer);        list_item=gtk_list_item_new();        gtk_container_add(GTK_CONTAINER(list_item), label);        gtk_widget_show(label);        gtk_container_add(GTK_CONTAINER(gtklist), list_item);        gtk_widget_show(list_item);        gtk_label_get(GTK_LABEL(label), &amp;string);        gtk_object_set_data(GTK_OBJECT(list_item),                            list_item_data_key,                            string);    }    /* qui creiamo altre 5 etichette, questa volta usando     * per la creazione gtk_list_item_new_with_label().     * Non possiamo recuperare la stringa di testo dall'etichetta     * dal momento che non disponiamo di puntatori alle etichette,     * quindi associamo semplicemente il list_item_data_key di ogni     * elemento di lista con la medesima stringa di testo.     * Per aggiungere elementi di lista, li mettiamo tutti in una lista     * doppiamente collegata (GList), e quindi li aggiungiamo con una     * unica chiamata a gtk_list_append_items().     * Dal momento che usiamo g_list_prepend() per mettere gli elementi     * nella lista doppiamente collegata, il loro ordine sara' discendente     * (invece che ascendente come sarebbe se usassimo g_list_append())     */    dlist=NULL;    for (; i&lt;10; i++) {        sprintf(buffer, "List Item with Label %d", i);        list_item=gtk_list_item_new_with_label(buffer);        dlist=g_list_prepend(dlist, list_item);        gtk_widget_show(list_item);        gtk_object_set_data(GTK_OBJECT(list_item),                            list_item_data_key,                            "ListItem with integrated Label");    }    gtk_list_append_items(GTK_LIST(gtklist), dlist);        /* e finalmente vogliamo vedere la finestra, non e' vero? ;)     */    gtk_widget_show(window);        /* lancia il ciclo principale di gtk     */    gtk_main();        /* si arriva a questo punto dopo la chiamata di gtk_main_quit(),     * il che accade quando viene distrutta la finestra principale     */    return 0;}/* questo e' il gestore di segnale che e' stato connesso all'evento di * pressione/rilascio del bottone della GtkList */voidsigh_button_event       (GtkWidget      *gtklist,                         GdkEventButton *event,                         GtkWidget      *frame){    /* facciamo qualcosa solo nel caso di rilascio del terzo bottone     * (quello piu' a destra)     */    if (event->type==GDK_BUTTON_RELEASE &amp;&amp;        event->button==3) {        GList           *dlist, *free_list;        GtkWidget       *new_prisoner;                /* recuperiamo l'elemento di lista selezionato correntemente,         * che sara' il nostro prossimo prigioniero ;)         */        dlist=GTK_LIST(gtklist)->selection;        if (dlist)                new_prisoner=GTK_WIDGET(dlist->data);        else                new_prisoner=NULL;                /* cerchiamo elementi di lista gia' imprigionati,         * li rimetteremo nella lista.         * Ricordare di liberare la lista doppiamente collegata         * che viene restituita da gtk_container_children()         */        dlist=gtk_container_children(GTK_CONTAINER(frame));        free_list=dlist;        while (dlist) {            GtkWidget       *list_item;                        list_item=dlist->data;                        gtk_widget_reparent(list_item, gtklist);                        dlist=dlist->next;        }        g_list_free(free_list);                /* se abbiamo un nuovo prigioniero, lo rimuoviamo         * dalla GtkList e lo mettiamo nella cornice della         * "Prigione". Dobbiamo prima deselezionare l'elemento         */        if (new_prisoner) {            GList   static_dlist;                        static_dlist.data=new_prisoner;            static_dlist.next=NULL;            static_dlist.prev=NULL;                        gtk_list_unselect_child(GTK_LIST(gtklist),                                    new_prisoner);            gtk_widget_reparent(new_prisoner, frame);        }    }}/* questo e' il gestore di segnaleche viene chiamato de la * GtkList emette il segnale "selection_changed" */voidsigh_print_selection    (GtkWidget      *gtklist,                         gpointer       func_data){    GList   *dlist;        /* recuperiamo la lista doppiamente collegata degli     * elementi selezionati della GtkList, ricordate di     * trattarla come sola lettura     */    dlist=GTK_LIST(gtklist)->selection;        /* se non ci sono elementi selezionati non c'e' altro da     * fare che dirlo all'utente     */    if (!dlist) {        g_print("Selection cleared\n");        return;    }    /* ok, abbiamo una selezione e quindi lo scriviamo     */    g_print("The selection is a ");        /* ottieniamo l'elemento di lista dalla lista doppiamente     * collegata e poi richiediamo i dati associati con     *  list_item_data_key. Poi semplicemente li stampiamo     */    while (dlist) {        GtkObject       *list_item;        gchar           *item_data_string;                list_item=GTK_OBJECT(dlist->data);        item_data_string=gtk_object_get_data(list_item,                                             list_item_data_key);        g_print("%s ", item_data_string);                dlist=dlist->next;    }    g_print("\n");}</PRE></CODE></BLOCKQUOTE><P><H2><A NAME="ss9.4">9.4 Il Widget Elemento di Lista (List Item)</A></H2><P>Il widget GtkListItem &egrave; progettato allo scopo di essere un contenitorecollegato ad un figlio, per fornire le funzioni per la selezione e deselezioneallo stesso modo in cui il widget GtkList ne ha bisogno per i propri figli.<P>Un GtkListItem ha la sua propria finestra per ricevere eventi, e ha il suoproprio colore di sfondo, che di solito &egrave; bianco.<P>Dal momento che questo widget deriva direttamente da GtkItem, pu&ograve; esseretrattato come tale usando la macro GTK_ITEM(ListItem), vedere il widgetGtkItem per ulteriori informazioni.Di solito un GtkListItem ha solo un'etichetta per identificare per esempioun nome di file all'interno di una GtkList -- per cui viene fornita lafunzione appropriata gtk_list_item_new_with_label(). Si pu&ograve; ottenere lostesso effetto creando una GtkLabel da sola, assegnando al suo allineamentoi valori xalign=0 e yalign=0.5, aggiungendo successivamente un contenitorealla GtkListItem.<P>Dal momento che non si &egrave; obbligati a mettere una GtkLabel, si pu&ograve; ancheaggiungere una GtkVBox  una GtkArrow ecc. alla GtkListItem.<P><P><H2><A NAME="ss9.5">9.5 Segnali</A></H2><P>Un GtkListItem non crea alcun nuovo segnale di per se, ma ereditai segnali di GtkItem. Per ulteriori informazioni, vedere GtkItem::.<P><H2><A NAME="ss9.6">9.6 Funzioni</A></H2><P><P><BLOCKQUOTE><CODE><PRE>guint gtk_list_item_get_type (void)</PRE></CODE></BLOCKQUOTE><P>Restituisce l'identificatore di tipo `GtkListItem'.<P><BLOCKQUOTE><CODE><PRE>GtkWidget* gtk_list_item_new (void)</PRE></CODE></BLOCKQUOTE><P>Crea un nuovo oggetto `GtkListItem'. Il nuovo widget viene restituitosottoforma di un puntatore ad un oggetto `GtkWidget'. In caso di fallimento, viene restituito `NULL'.<P><BLOCKQUOTE><CODE><PRE>GtkWidget* gtk_list_item_new_with_label (gchar *LABEL)</PRE></CODE></BLOCKQUOTE><P>Cre un nuovo oggetto `GtkListItem', avente come unico figlioun GtkLabel.  Il nuovo widget viene restituitosottoforma di un puntatore ad un oggetto `GtkWidget'. In caso di fallimento, viene restituito `NULL'.<P><BLOCKQUOTE><CODE><PRE>void gtk_list_item_select (GtkListItem *LIST_ITEM)</PRE></CODE></BLOCKQUOTE><P>Questa funzione &egrave; essenzialmente un wrapper per una chiamata agtk_item_select (GTK_ITEM (list_item)) che emetter&agrave; il segnaleselect.Vedere GtkItem:: per maggiori informazioni.<P><BLOCKQUOTE><CODE><PRE>void gtk_list_item_deselect (GtkListItem *LIST_ITEM)</PRE></CODE></BLOCKQUOTE><P>Questa funzione &egrave; essenzialmente un wrapper per una chiamata agtk_item_deselect (GTK_ITEM (list_item)) che emetter&agrave; il segnaledeselect.Vedere GtkItem:: per maggiori informazioni.<P><BLOCKQUOTE><CODE><PRE>GtkListItem* GTK_LIST_ITEM (gpointer OBJ)</PRE></CODE></BLOCKQUOTE><P>Effettua il cast di un puntatore generico a `GtkListItem*'. VedereStandard Macros:: per maggiorni informazioni.<P><BLOCKQUOTE><CODE><PRE>GtkListItemClass* GTK_LIST_ITEM_CLASS (gpointer CLASS)</PRE></CODE></BLOCKQUOTE><P>Effettua il cast di un puntatore generico a `GtkListItemClass*'. VedereStandard Macros:: per maggiorni informazioni.<P><BLOCKQUOTE><CODE><PRE>gint GTK_IS_LIST_ITEM (gpointer OBJ)</PRE></CODE></BLOCKQUOTE><P>Determina se un puntatore generico si riferisce ad un oggetto`GtkListItem'. Vedere Standard Macros:: per maggiorni informazioni.<P> <H2><A NAME="ss9.7">9.7 Esempio</A></H2><P>Come esempio su questo argomento, si veda quello relativo alla GtkList,che riguarda anche l'uso del GtkListItem.<P><HR NOSHADE><A HREF="gtk_tut_it-10.html">Avanti</A><A HREF="gtk_tut_it-8.html">Indietro</A><A HREF="gtk_tut_it.html#toc9">Indice</A></BODY></HTML>

⌨️ 快捷键说明

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