PDA

View Full Version : GTK: gestione windows,,,


x110
10-09-2003, 15:47
io ho una semplice finsetra che viene creata nel main.
all'interno ho un pulsante.
premendolo vorrei che apparisse un'altra finestra che puo' gestirsi come vuole indipendentemente dalla prima.

ora pero' come faccio a visualizzare la seconda?
e a distruggetla...

int main(......
{

GtkWidget *window;
window=gtk_new_windows(GTK_WINDOW_TOPLEVEL)

//crea pulsante ed assegna callback alla pressione

gtk_widget_show(window);

gtk_main()
}

void callback(.........
{
//qui devo creare la nuova finestra e farci gestire gli eventi di chiusura.....
//ma la gtk_main_quit(); mi chiude l'applicazione io voglio solo chiudere questa finestra
non ho trovato cenni sui tutorial.....
}

x110
10-09-2003, 16:02
forse mi sono risposto da solo vorrei solo la conferma...
gtk_widget_destroy()

cionci
10-09-2003, 17:11
x110: hai per caso esempi di programmazione in GTK+, ma in C++ e non in C... Compilando sorgenti C mi centinaia di errori di cast...

x110
10-09-2003, 17:36
guarda.... :confused: non so molto bene cosa risponderti,,,,,,
(sembro veramente un deficente)
comunque ti posso dare un po' di indicazioni.
1 il casting e' molto frequente nelle gtk e ci sono delle regole che sarebbe bene ti
leggessi nel tutorial....non e' complicato, diventa quasi meccanico.

www.gtk.org sotto tutorial ci sono 2 versioni principali di gtk le 1.2 e le 2.xx
la traduzione in italiano la puoi avere qui
http://www.fifi.org/doc/libgtk1.2-doc/gtk-tutorial-it-html/gtk_tut_it-1.html

vai diretto sulle 2.xx hanno widget(=gadget) piu' articolate.(e complesse)
ovviamente devi avere la versione giusta installata.
gli esempi piu' elementari li trovi qui.

stai usando linux vero?
le gtk vanno anche sotto windows ma da quel che ho letto
sono un po' piu' problematiche. potrebbe anche non essere vero....

comunque sono all'inizio anch'io quindi ho capito solo alcuni concetti.
se hai bisogno di qualche spiegazione sempliciotta postami,
io non ho mai scritto seriamente in c quindi sono doppiamente spiazzato....
sto pero' imparando.

le gtk hanno un bel widget che si chiama "table" che ridimensiona automaticamente i
widget all'interno al ridimensionarsi della finestra, per specificare posizioni fisse
devi usare il widget fixed...

cionci
10-09-2003, 17:42
No, sono sotto Windows...ho già installato tutte le librerie per le 2.0...

Il problema è che voglio usarle con il C++ e visto che i sorgenti sono principalmente per C ho problemi di casting (nel senso che mi ritrovo errori di tipo che con il compialtore C non ottengo)...

Dov'è il tutorial per le 2.0 in quel link ?

x110
10-09-2003, 17:45
vai al link della traduzione italiana,
in fondo alla pagina c'e' scritto:

Notate che c'è anche una versione per il C++ della libreria GTK (chiamata GTK--), quindi
se preferite utilizzare questo linguaggio al posto del C potreste cercare questa versione al
posto della GTK normale. Ci sono poi un ``wrapper'' Objective C e un collegamento a Guile, ma non ne seguo l'evoluzione.

se ti puo' essere utile.....

x110
10-09-2003, 17:48
ineffetti il link per il tutorial in italiano fa riferimento alle 1.2
ma sul sito originale sicuramente c'e' il tutorial per le 2.0
dovrebbe cambiare molto per la compilazione(almeno sotto linux devi specificare percorsi diversi)

le basi sono comunque valide.

mi spiace ma per ora seguendo i tutorial ho fatto solo prog in c.

cionci
10-09-2003, 18:11
Nono...volevo farmi io un wrapper...

Piuttosto mi da questo errore:

Cannot load module /target/lib/pango/1.0.0/modules/pango-basic-win32.dll: Impossibile trovare il modulo specificato.

Strano, mi sembra di aver caricato tutte le varie librerie correttamente... Nonostante metta la DLL nella stessa dir dell'eseguibile continua a non trovarla...

cionci
10-09-2003, 18:12
Ah l'errore me lo da in fase di esecuzione...facendo il secondo esempio del tutorial...

mjordan
11-09-2003, 05:22
Originariamente inviato da x110
forse mi sono risposto da solo vorrei solo la conferma...
gtk_widget_destroy()

Esatto x110 ...
Puoi usare prima gtk_widget_hide() per nascondere la finestra, successivamente usare gtk_widget_destroy() per distruggere il widget e deallocare la memoria.

Difatti questo è un argomento abbastanza serio. Puoi chiudere una finestra semplicemente nascondendola o anche distruggendola. Tutto dipende da quanto deve essere usata la finestra (e da quanto è complessa)...

mjordan
11-09-2003, 05:26
Originariamente inviato da cionci
Nono...volevo farmi io un wrapper...

Piuttosto mi da questo errore:

Cannot load module /target/lib/pango/1.0.0/modules/pango-basic-win32.dll: Impossibile trovare il modulo specificato.

Strano, mi sembra di aver caricato tutte le varie librerie correttamente... Nonostante metta la DLL nella stessa dir dell'eseguibile continua a non trovarla...

Leggi bene. Non devi mettere le dll nela stessa dir dell'eseguibile, bensì rispettare la gerarchia delle directory che la lib richiede. Tempo fa feci una prova anch'io e vi riuscii. Ma non ricordo granchè in merito. Le librerie comunque vanno messe in un certo modo. Penso perchè comunque GTK+ per Windows non è ancora tutto sto granchè ... ed è altamente sperimentale ... Sto ancora aspettando DevEx per Dev-C++ che usi le GTK+ 2.2.x ...

mjordan
11-09-2003, 06:57
A proposito, che compilatore/versione stai usando???

cionci
11-09-2003, 07:30
Sto provandocon Visual C++, ma non è lì il problema... L'errore me lo da anche con la demo... Il fatto che non esiste quella directry chiamata target !!! Per il resto il percorso è giusto...

cionci
11-09-2003, 07:32
Anzi ora che vedo bene il eprcorso non è giusto... Cerca pango 1.0.0 mentre io ho installato Pango 1.2.0 ed ovviamente la directory si chiama 1.0.0...eppure il tool di configurazione di pango l'ho lanciato !!!
Rinominando la directory come 1.0.0 nonc ambia niente (mi succede anche con l'exe dimostrativo già compilato...

mjordan
11-09-2003, 09:24
Mmmm...
Quali librerie hai preso? WinGTK? Gtk4Win?? Dove??
Voglio fare una prova anch'io ...

cionci
11-09-2003, 12:07
Ho preso le GTK per Windows da http://www.gimp.org/~tml/gimp/win32/downloads.html

Ovviamente bisogna scaricare tutto il necessario per la versione 2...

mjordan
12-09-2003, 07:05
Originariamente inviato da cionci
Ho preso le GTK per Windows da http://www.gimp.org/~tml/gimp/win32/downloads.html

Ovviamente bisogna scaricare tutto il necessario per la versione 2...
Si erano quelle che avevo usato io...
Ho scaricato tutto il necessario e l'ho installato in una directory. Nel tree della directory, nella sottodir bin, ho lanciato gtk-demo. Mi diceva che mancava la libreria atk. Allora ho copiato il file libatk-1.0-0.dll nella dir bin e il demo si è avviato correttamente, cioè il runtime GTK+ funziona perfettamente sotto Windows.
Ho scaricato la versione GTK+ 2.2.4 (glib-2.2.3).

Non ho mica capito che tool di configurazione di pango hai lanciato. Non serve configurare nulla...Solo estrarre gli archivi zip in una dir :confused:

Forse ti manca qualcosa. Ti do la lista intera dei pacchetti che ho scaricato:


atk-1.2.4.zip
atk-dev-1.2.4.zip
gettext-runtime-0.12.1.bin.woe32.zip
glib-2.2.3.zip
glib-dev-2.2.3.zip
gtk+-2.2.4.zip
gtk+-dev-2.2.4.zip
jpeg-6b-1-bin.exe
jpeg-6b-1-lib.exe
libiconv-1.9.1.bin.woe32.zip
libpng-1.2.4-1-bin.zip
libpng-1.2.4-1-lib.zip
librle-3.1.b1-1-bin.zip
librle-3.1.b1-1-lib.zip
netpbm-10.6-1-lib.zip
netpbm-10.6-bin.zip
pango-1.2.5.zip
pango-dev-1.2.5.zip
tiff-3.5.7-bin.exe
tiff-3.5.7-lib.exe
zlib-1.1.4-1-bin.exe
zlib-1.1.4-1-lib.exe


In tutto 22 pacchetti per un totale di circa 13,4 Mb.

cionci
12-09-2003, 09:53
Ho tutto...devi lanciare il tool di autoconfigurazione che si trova in bin (pango-querymodules.exe)...almeno così avevo capito...
Poi ho messo la directory bin e la directory lib nel path...

x110
12-09-2003, 14:23
scusate se non ho postato ieri ma sono mancato tutto il giorno...
per windows non posso esserti un granche' utile mjordan e' forse piu' pratico...

ciao....

mjordan
12-09-2003, 22:10
Originariamente inviato da cionci
Ho tutto...devi lanciare il tool di autoconfigurazione che si trova in bin (pango-querymodules.exe)...almeno così avevo capito...
Poi ho messo la directory bin e la directory lib nel path...

Non so che dirti. A me funziona tutto senza aver eseguito nulla, a parte quel copia incolla che ti diceo prima.

cionci
12-09-2003, 22:22
Riproverò...mah...

cionci
12-09-2003, 22:57
Ma te quale demo hai lanciato ?
Prova a lanciare quella in share\gtk-2.0\demo

mjordan
12-09-2003, 23:16
Originariamente inviato da cionci
Ma te quale demo hai lanciato ?
Prova a lanciare quella in share\gtk-2.0\demo

Funziona. Ovviamente ho dovuto copiarvi le librerie necessarie + la dir lib e etc.
Ce l'hai messa la dir etc li dentro??

cionci
12-09-2003, 23:23
Per fare in modo che lanciando un eseguibile non si debba fare spostare i file come si può fare ? La dir Lib e bin sono già in path...

cionci
12-09-2003, 23:28
Copiandoci lib, bin e etc funziona...ma come ho detto prima, non c'è altro modo (ha devo copiare anche libpango* da bin direttamente dentro la dir)?

cionci
12-09-2003, 23:48
Ho risolto tutto...avevo installato il runtime GTK+ che si scaricava con Dev-C++ e avevo un capia datata delle librerie in System32...