Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Gtk - Signale

von MitgliedStueberSeite 1 von 1

Was ist ein Signal?

In den letzten zwei Tutorials (Teil 1, Teil 2) hast du eine Oberfläche erstellt mit Buttons. Soweit so gut, aber Buttons nützen noch nicht viel. Auf die Buttons muss ja auch reagiert werden. Dafür ist ein Signal da. Gtk definiert für jedes Steuerelement Signale und deine Aufgabe ist es, die Callback-Funktionen zu schreiben. Eine Callback Funktion ist eine Funktion, die mit einem Signal verbunden wurde, und tut das, was eben als Reaktion auf das Signal gewünscht ist. Signale sind damit ein Ersatz für Schleifen, die auf BefehlsreferenzeintragINKEY oder BefehlsreferenzeintragGETMOUSE warten (Stichwort: Ereignisschleife).

Wie schreibe ich eine solche Callback-Funktion?

Zuerst musst du ein normales Unterprogramm (BefehlsreferenzeintragSub) schreiben. Dieses Sub muss genau zwei Parameter haben, außer wenn vom Signal anders gewünscht. Der erste ist immer vom Typ GtkWidget ptr und zeigt auf das betreffende Steuerelement. Der letzte ist vom Typ gpointer und ist jetzt noch uninteressant für dich.
Gtk ist, wie du vielleicht schon gehört hast, in C geschrieben. Daher musst du das Sub mit cdecl deklarieren (siehe Eintrag in der BefehlsreferenzeintragBefehlsreferenz).

Verbinden von Signal und Callback

Jedes Steuerelement hat von Gtk vordefinierte Signale. Diese werden mit der Funktion g_signal_connect() mit Callback-Funktionen verbunden. Der erste Parameter ist das GtkWidget, der zweite der Name des Signals, der dritte ein Zeiger auf die Callback-Funktion und der vierte ist der Parameter, der als letztes an deine Callback-Funktion übergeben wird. Das wichtigste Signal für Buttons heißt "clicked". Es wird immer ausgelöst, wenn dein Button angeklickt wurde.

Beispiel

#include once "gtk/gtk.bi"


sub callback cdecl (byval widget as GtkWidget ptr, byval user_data as gpointer)
    print "Button geklickt!"
end sub


gtk_init (0, 0)

dim as GtkWidget ptr win = gtk_window_new (GTK_WINDOW_TOPLEVEL)
gtk_window_set_title (GTK_WINDOW (win), "Test")

dim as GtkWidget ptr button = gtk_button_new_with_label("Button 1")
g_signal_connect(GTK_OBJECT(button),"clicked",G_CALLBACK(@callback),0)

gtk_container_add (GTK_CONTAINER(win), button)
gtk_widget_show_all (win)


gtk_main()

Jetzt kannst du dir auch denken, was gtk_main() tut. Die Funktion wartet auf Benutzereingabe und löst dann deine Callback-Funktion aus.

 

Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 09.02.2010 von MitgliedStueber angelegt.
  • Die aktuellste Version wurde am 10.02.2010 von AdministratorSebastian gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen