ein Kapitel zurück                                           ein Kapitel weiter

Es ist immer am schwierigsten bei einen Tutorial den Anfang zu machen. Ich beginne als erstes mit dem Hauptwidget dem Fenster (Window). Dies können sie sich auch gleich merken. Ein Fenster ist auch ein Widget! Bevor wir aber loslegen sollten sie Sicher sein das sie GTK auch installiert haben. Sie können ja die Version mit folgender Eingabe in einer Konsole testen:

gtk-config --version  

gtk-config ist ein Shell-Skript. Mehr dazu erfahren sie mit der Eingabe von:

gtk-config --help  

Ich verwende hier Version 1.2.8 obwohl bereits die Version 2.0 erhältlich ist. Somit können sie auf jeden Fall sicher, dass alles was sie hier finden auch mindestens ab Version 1.2.x funktioniert.

Nun wollen wir uns ansehen, wie wir mit GTK ein Fenster erzeugen können. Lassen wir doch erst mal ein Programmbeispiel für sich sprechen:

/*Download:fenster.c*/

#include <gtk/gtk.h>

int main(int argc, char **argv)
{
 GtkWidget *fenster;

 gtk_init(&argc, &argv);

 fenster = gtk_window_new(GTK_WINDOW_TOPLEVEL);

 gtk_signal_connect(GTK_OBJECT(fenster), "destroy",
                    GTK_SIGNAL_FUNC(gtk_main_quit),NULL);

 gtk_widget_show(fenster);

 gtk_main();
 return 0;
}

Übersetzen sie nun diese Programmbeispiel folgendermaßen:

gcc fenster.c `gtk-config --cflags --libs` -o fenster  

Nun wenn alles glatt Verlaufen ist müssten sie folgendes Fenster vor sich haben:


Ein leeres Fenster


Nun wollen wir die einzelnen Fragmente des Programms analysieren bis auf die Funktion gtk_signal_connect wollen wir noch ignorieren.

Zur Headerdatei gtk/gtk.h denke ich mal muss ich nichts sagen. Zuerst definieren wir in der main-Funktion eine Zeiger auf ein Widget (GtkWidget). In unserem Fall auf des Widget fenster. GtkWidget ist eine Struktur aber dazu später mehr.

Nun kommt eine wichtige Zeile. Mit :

gtk_init(&argc, &argv);  

initialisieren wir GTK. Dies bedeutet wir stellen eine Verbindung zum X-Server her. Die Argumente in argv werden geparst. Und zu guter letzt richtet die Funktion gtk_init noch eine "Cleanup-Funktion" ein und zwar die Funktion atexit(), welcher jeder C-Programmierer kennen müsste. Warum atexit und nicht exit werden wir noch aufklären.

Im nächsten Schritt:

fenster = gtk_window_new(GTK_WINDOW_TOPLEVEL);  

legen wir eine Struktur für unser Fenster an auf die unser Widget-Zeiger fenster zeigt. Hierzu nun der reguläre Syntax für die Funktion....

GtkWidget *gtk_window_new(GtkWindowType *type);  

Folgende Konstanten können sie für den Fenstertypen (GtkWindowType) verwenden:

  • GTK_WINDOW_TOPLEVEL - Wird meist für typische Applikationen verwendet
  • GTK_WINDOW_DIALOG - Für Fenster die für Nachrichten oder Dialoge verwendet
  • GTK_WINDOW_POPUP - Ein Fenster für Popup's

Und zum Schluss wird noch die Funktion:

gtk_widget_show(fenster);  

für die Anzeige des Fensters auf dem Bildschirm verwendet. Ohne dem Aufruf dieser Funktion das Widget nicht auf dem Bildschirm ausgegeben.

Die Funktion:

gtk_main();  

Am Ende stellt eine Endlosschleife da. Die Schleife wird solange wiederholt bis die Funktion gtk_main_quit aufgerufen wird. Hierzu der Syntax der beiden Funktionen....

void gtk_main(void);
void gtk_main_quit(void);  

Wird die Funktion gtk_main_quit aufgerufen, geht es hinter gtk_main weiter. Bei uns wird an der main der Rückgabewert 0 übergeben und damit das Programm beendet..

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf