







|

Nun wollen wir in diesem Kapitel ein Fenster erstellen mit einem Button,
mit "Hallo Welt" - Beschriftung. Bei einem Klick auf diesem Button wird
das Fenster wieder geschlossen. Sie werden zum ersten mal sehen wie sie
Signale in der Praxis einrichten können, und wie sie damit umgehen können.
Genug der Reden, sehen wir uns dazu erst mal das Programm an:
/*Download:gtk_sig.c*/
#include <gtk/gtk.h>
gint delete_cb(GtkWidget *widget, GdkEvent *event, gpointer *data)
{
return(TRUE);
}
void ende_cb(GtkObject *object)
{
gtk_main_quit();
}
int main(int argc, char **argv)
{
GtkWidget *fenster;
GtkWidget *button;
/*Gtk initialisieren*/
gtk_init(&argc, &argv);
/*Ein neues Fenster erstellen*/
fenster = gtk_window_new(GTK_WINDOW_TOPLEVEL);
/*Einen Button erstellen*/
button = gtk_button_new_with_label("Hallo Welt");
/*Signale registrieren*/
gtk_signal_connect(GTK_OBJECT(fenster), "delete_event",
GTK_SIGNAL_FUNC(delete_cb),NULL);
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(ende_cb), GTK_OBJECT(fenster));
/*Fenstertitel*/
gtk_window_set_title(GTK_WINDOW(fenster), "Hallo Welt mit Button");
/*Fensterposition*/
gtk_window_set_position(GTK_WINDOW(fenster),GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(fenster),25);
/*Fenster dem dem Button zuordnen*/
gtk_container_add(GTK_CONTAINER(fenster),button);
/*Zeigs uns.....*/
gtk_widget_show_all(fenster);
gtk_main();
return 0;
}
|
Wenn sie diese Programm wie gewohnt aus dem Kapitel der Fenster übersetzen,
könnte es wie folgt aussehen:
Nun wollen wir das Beispiel ein wenig analysieren. Uns Interessieren vorerst nur
die Ereignisse und Ihre Reaktionen.
Zuerst zu unserem ersten Ereignishandler den wir eingerichtet haben:
gtk_signal_connect(GTK_OBJECT(fenster), "delete_event",
GTK_SIGNAL_FUNC(delete_cb),NULL);
Das Ereignis "delete_event" wird vom Windowsmanager an unser Programm
gesendet wenn wir das "Fenster schließen" drücken. Dies ignorieren wir
aber, da unser Callback-Funktion delete_cb als Rückgabewert TRUE
liefert.
Würden wir FALSE angeben, würde das Fenster geschlossen. Mit unserem
2. Siganlhandler:
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(ende_cb), GTK_OBJECT(fenster));
reagieren wir, wenn der Button ge"clicked" wurde mit der Callback-Funktion
ende_cb. Die Callback-Funktion wirkt sich anschließend auf das Widget
fenster aus. Unsere Callback-Funktion ende_cb schließt unser Fenster
(gtk_main_quit).
Die Callback-Funktion ende_cb hätten wir uns aber mit folgender Schreibweise
sparen können:
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(gtk_main_quit), GTK_OBJECT(fenster));
Hier haben wir die Callback-Funktion gleich direkt registriert.
Bildlich können sie sich denn Programmablaufplan "Hallo Welt" folgendermaßen
vorstellen:
Den Rest des Programms werden wir in den nächsten Kapiteln durchnehmen.

© 2001,2002 Jürgen Wolf
|