Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: [C] libreria GTK+

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    69

    [C] libreria GTK+

    Salve,

    grazie anche all'aiuto di alcuni utenti del forum sono venuto a conoscenza di una libreria grafica in C sopratutto per creare GUI.
    Vorrei sapere se c'è qualcuno che già la conosce e mi può aiutare nei primi passi, sopratutto per l'installazione!!!

    grazie

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Ho trovato un modo per fare andare gtk con VisualC, anche se e un po empirico. ora ti scrivo il procedimento.

  3. #3
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Per usare gtk sotto windows con Visualc++ installa l'ambiente completo che puoi scaricare a questo indirizzo (Gtk+/Win32 Development Environment ):

    http://gladewin32.sourceforge.net/

    durante l'installazione seleziona l'opzione per MicrosoftVisual C++.


    Fatto cio, apri VisualC++, crea un nuovo progetto come win32 console application (non win32 application!), e crea un progetto vuoto.


    A questo punto bisogna indicare al compilatore 3 cose:


    - 1 le librerie con cui linkare;
    - 2 dove trovare le librerie.
    - 3 dove trovare i file include;



    1 - LIBRERIE CON CUI LINKARE


    Scegli il menu Project > settings

    1 - Seleziona la scheda Link. Seleziona la categoria Input. Nel campo 'Object/library modules' aggiungi all'inizio:

    glib-2.0.lib gtk-win32-2.0.lib gdk-win32-2.0.lib gobject-2.0.lib gdk_pixbuf-2.0.lib gthread-2.0.lib gmodule-2.0.lib pango-1.0.lib

    (attento a non concatenare l'ultima libreria con la prima gia esistente prima di incollare la nuova riga)

    queste librerie dovrebbero bastare; per applicazioni piu comlesse potrebbe essere necessario aggiungerne altre; qui una riga piu completa:


    gtk-win32-2.0.lib gdk-win32-2.0.lib gthread-2.0.lib gdi32.lib ole32.lib uuid.lib atk-1.0.lib gdk_pixbuf-2.0.lib pangowin32-1.0.lib gdi32.lib pango-1.0.lib gobject-2.0.lib gmodule-2.0.lib glib-2.0.lib intl.lib iconv.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib


    questi file si trovano tutti nella cartella lib di gtk; quindi se cerchi qlke libreria dovresti trovarla li. Se installi un'altra versione di gtk i nomi dei file potrebbero cambiare, ad esemmbio il numero di versione 2.0 potrebbe essere diverso.



    2 - DOVE TROVARE LE LIBRERIE

    Sempre nella scheda Link/categoria 'Input', nel campo 'Additional library path' inserisci il percorso della sottocartella lib di gtk, ad esempio se hai installato gtk in c:\programmi\gtk, inserisci:

    C:\Programmi\GTK\lib



    3 - DOVE TROVARE I FILES INCLUDE


    Passa alla scheda 'Resources' e nel campo 'additional resource indlcude directories' metti il percorso delle cartelle gtk all'interno delle quali si trovano i files include; queste cartele sono la cartella include di gtk e altre sottocartelle della cartella lib; questi percorsi dovrebbero essere sufficienti:


    C:PRORAMMI\GTK\INCLUDE\GTK-2.0, C:PRORAMMI\GTK\LIB\GTK-2.0\INCLUDE, C:PRORAMMMI\GTK\INCLUDE\GLIB-2.0, C:PRORAMMI\GTK\LIB\GLIB-2.0\INCLUDE, C:PRORAMMI\GTK\INCLUDE\PANGO-1.0, C:PRORAMMI\GTK\INCLUDE\ATK-1.0, C:PRORAMMI\GTK\include


    Quindi dai ok.



    PROVARE A COMPILARE UN PROGRAMMA


    Per fare una prova, crea un file .c (se vuoi usare gtk con programmi c dà estensione .c al file per evitare che il compilatore compili come file c++) e incolla questo programma 'HelloWorld' gtk (questo programma è preso dal tutorial gtk, non so se i file prodotti da glade possano essere facimlmente compilati facendo seplpicemente copia-incolla, ma come ti ho detto è meglio seguire il tutorial!):

    codice:
     
    #include <gtk/gtk.h>
    
    /* This is a callback function. The data arguments are ignored
     * in this example. More on callbacks below. */
    static void hello( GtkWidget *widget,
                       gpointer   data )
    {
        g_print ("Hello World\n");
    }
    
    static gboolean delete_event( GtkWidget *widget,
                                  GdkEvent  *event,
                                  gpointer   data )
    {
        /* If you return FALSE in the "delete_event" signal handler,
         * GTK will emit the "destroy" signal. Returning TRUE means
         * you don't want the window to be destroyed.
         * This is useful for popping up 'are you sure you want to quit?'
         * type dialogs. */
    
        g_print ("delete event occurred\n");
    
        /* Change TRUE to FALSE and the main window will be destroyed with
         * a "delete_event". */
    
        return TRUE;
    }
    
    /* Another callback */
    static void destroy( GtkWidget *widget,
                         gpointer   data )
    {
        gtk_main_quit ();
    }
    
    int main( int   argc,
              char *argv[] )
    {
        /* GtkWidget is the storage type for widgets */
        GtkWidget *window;
        GtkWidget *button;
        
        /* This is called in all GTK applications. Arguments are parsed
         * from the command line and are returned to the application. */
        gtk_init (&argc, &argv);
        
        /* create a new window */
        window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        
        /* When the window is given the "delete_event" signal (this is given
         * by the window manager, usually by the "close" option, or on the
         * titlebar), we ask it to call the delete_event () function
         * as defined above. The data passed to the callback
         * function is NULL and is ignored in the callback function. */
        g_signal_connect (G_OBJECT (window), "delete_event",
    		      G_CALLBACK (delete_event), NULL);
        
        /* Here we connect the "destroy" event to a signal handler.  
         * This event occurs when we call gtk_widget_destroy() on the window,
         * or if we return FALSE in the "delete_event" callback. */
        g_signal_connect (G_OBJECT (window), "destroy",
    		      G_CALLBACK (destroy), NULL);
        
        /* Sets the border width of the window. */
        gtk_container_set_border_width (GTK_CONTAINER (window), 10);
        
        /* Creates a new button with the label "Hello World". */
        button = gtk_button_new_with_label ("Hello World");
        
        /* When the button receives the "clicked" signal, it will call the
         * function hello() passing it NULL as its argument.  The hello()
         * function is defined above. */
        g_signal_connect (G_OBJECT (button), "clicked",
    		      G_CALLBACK (hello), NULL);
        
        /* This will cause the window to be destroyed by calling
         * gtk_widget_destroy(window) when "clicked".  Again, the destroy
         * signal could come from here, or the window manager. */
        g_signal_connect_swapped (G_OBJECT (button), "clicked",
    			      G_CALLBACK (gtk_widget_destroy),
                                  G_OBJECT (window));
        
        /* This packs the button into the window (a gtk container). */
        gtk_container_add (GTK_CONTAINER (window), button);
        
        /* The final step is to display this newly created widget. */
        gtk_widget_show (button);
        
        /* and the window */
        gtk_widget_show (window);
        
        /* All GTK applications must have a gtk_main(). Control ends here
         * and waits for an event to occur (like a key press or
         * mouse event). */
        gtk_main ();
        
        return 0;
    }

    Se tutto è a posto, eseguendo dovresti vedere una piccola finestrella con un pulsante per uscire dall'applicazione.



    COMPLILARE UN PROGRAMMA CON OPEGL

    Bisogna linkare contro queste libreire aggiuntive:

    OPENGL32.LIB glu32.lib gdkglext-win32-1.0.lib gtkglext-win32-1.0.lib


    (OPENGL32.LIB e glu32.lib sono la libreria opengl e la libreria glu di VisualC)


    Per prova si puo eseguire il prorgamma button.c che si trova nella sottocartella gtkglext-examples di gtk, in cui sono raccolti deli esempi di programmi opengl.



    A questo link:

    http://www.dropline.net/gtk/support.php

    ho trovato conferma di queste impostazioni.



  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    69
    Non so come e dove hai scovato ste informazioni ma funziona tutto anche con Glade!!!!!!!!!!!!



    grazie infinite (nn c'è la faccina che si inchina altrimenti avrei riempito con quella!!!)

  5. #5
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Bhe allora puoi dirmi come hai fatto a far funzionare glade, io ho solo provato a costruire una finestra e poi a compilare tuti i file prodotti da glade nella finestra src,ma non mi trova il file header unistd.h.

    Tu cosa hai fatto di preciso?

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    69
    mmm,

    beh per prima cosa ho aggiunto le altre librerie. Poi ho provato. In realtà mi dava un errore perchè non vedeva una costante idiota (PACKAGE) che stava in config.h (uno dei file creati da Glade e messo nella cartella che CONTIENE src, cioè quella del progetto). Perciò ho definito nel main.c (creato da Glade) quella variabile che altro non è che il nome del progetto.
    Ho compilato e linkato e andava tutto...

  7. #7
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Bho..con VisualC i file prodotti da glade non nmi funzionano perche non trova il file header unistd.h che viene incluso in interface.c e anche in altri file; in effetti non esiste nelle cartelle di visualc...nelle tue cartelle c'è?

    Pero sono riuscito a fare andare gtk e anche glade con MinGW Developper studio, che è ancora piu comodo di VisualC: basta infatti installare l'ambiente gtk; quindi scaricare l'estensione gtk di MinGWDevelpperstudio e scompattarla nella cartella di MinGWDevelopperStuio: in questo modo, quando crei un progetto in MinGW DeveloppeStudio puoi direttametne selezionare 'Applicazione GTK', e cosi lui automaticamente ti linka tutte le librerie necessarie senza dover mettere tutte le impostazioni a mano,


  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    69
    Mah, da me ho visto che unistd.h la include fra tutte le dipendenze (è proprio l'ultima) e anche da me c'è un #include <unistd.h> in interface.c ma non sembra dare problemi...

    Ora magari provo anche con MinGW.

    Cmq un arcano resta. Installando l'ambiente di sviluppo gtk/glade non ho capito cosa si intende per "runtime".
    Voglio dire...la libreira GTK+ c'è tutta o no?

  9. #9
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Il senso della cosa è questo:

    la libreria in se è costituita da file .h e da da file .lib, e serve per programmare e compilare. Una volta che hai creato un eseuibile, affinche possa essere eseguito è necessario che sia presente il runtime, penso che si tratti di alcune dll che vengono utilizzate dalle applicazioni gtk; questo perche compilando la libreira non viene inclusa nell'eseguibile prodotto, ma nell'eseguibile ci saranno le chiamate alle dll gtk. Questo singifica che se crei un'applicazione e la esegui su un pc su cui non e installto il runtime, non funziona. Infatti ho provato momentaneamente a disintallare gtk, e il prorgamma creato non fungeva piu.

    Per glade...ho provato un esempio piu complesso e non mi ha funzionato nenanche con MinGW; quali librerie aggiungtive hai utilizzato per il link?

    Comuqnue preferisco sempre prorgammare a mano, perche puoi veramente capire come funziona la libreira, e poi il codice puoi organizzartelo come vuoi...basta vedere quanto codice genera glade in 4/5 file per far apparire una sola finestra, mentre bastano una decina di righe...


  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    69
    credo che tu abbia ragione sul runtime. grazie.

    Per le libreire aggiunte ho inserito quelle che mi hai detto tu:

    gtk-win32-2.0.lib gdk-win32-2.0.lib gthread-2.0.lib gdi32.lib ole32.lib uuid.lib atk-1.0.lib gdk_pixbuf-2.0.lib pangowin32-1.0.lib gdi32.lib pango-1.0.lib gobject-2.0.lib gmodule-2.0.lib glib-2.0.lib intl.lib iconv.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

    Cmq è vero. Glade spara con il cannone ai moscerini!

    Speriamo di risuscire a fare qualcosa. Il problema per me è che devo disegnarci anche dei rettangoli e non ho capito quali potenzialità abbia GTK da questo punto di vista.
    Inoltre la mia applicazione deve avere una complessità computazionale bassa e quindi devo escludere l'uso di Java.
    Poi C++ non lo conosco.
    Insomma rimane il C con le GTK o le Win API!!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.