Ein einfaches Fenster mit einem Button
Um die Xt-Funktionen zu verwenden, sind immer mindestens folgende zwei Headerdateien nötig:/* Toolkit-Strukturen */
#include <X11/Intrinsic.h>
/* Toolkit-Konstanten, z.B. fuer Ressourcen */
#include <X11/StringDefs.h>
Des Weiteren sind bestimmte Header für die verwendete Widget-Klasse nötig. Im ersten Beispiel werden zwei Buttons verwendet, welche in der folgenden Headerdatei definiert sind:
/* Command-Widget des Athena Sets */
#include <X11/Xaw/Command.h>
Im ersten Schritt, bevor Sie überhaupt ein Widget verwenden können, müssen Sie erst das Toolkit initialisieren. Initialisieren können Sie ein Toolkit mit der Funktion XtVaAppInitialize(), wodurch eine komplexe Datenstruktur mit dem Namen XtAppContext, welche für weitere Aktionen später benötigt wird, initialisiert wird. Die Funktion XtVaAppInitialize() liefert eine Variable vom Typ Widget zurück und stellt gleichzeitig auch das Ranghöchste Widget in der Widget-Hierarchie dar - das Root- bzw. Eltern-Widget aller noch im Programm folgenden Widgets. Es gibt noch andere Funktionen zum Initialisieren eines Toolkits, welche sich nur geringfügig von der Anzahl der Parameter unterscheiden. Bspw. besteht zwischen XtAppInitialize() und XtVaAppInitialize() nur der Unterschied, dass die zweite Version (..Va..) eine variable Argumentenliste zulässt.
Hinweis
Es gibt bei vielen Xt-Funktionen eine zweite Version die eine variable Argumentenliste verwendet.
Eine Anwendung der Funktion XtVaAppInitialize() könnte wie folgt aussehen:
int main (int argc, char **argv) {
XtAppContext contex; /* Wird bei Init des Toolkits belegt */
Widget w_root; /* Variable fuer Root-Widget */
...
w_root = XtVaAppInitialize(
&app_context, /* Kontext der Applikation */
NULL , /* Applikationsklasse */
NULL, 0, /* Kommandozeilenoptionsliste */
&argc, argv, /* Kommandozeilenargumente */
NULL, /* fallback_ressources */
NULL); /* Terminierte varargs Liste */
In den folgenden Beispielen werden Sie diese Funktion auch nicht mit den anderen Parametern verwenden - daher werden die meisten Werte mit NULL bzw. 0 belegt. Bis auf die Bedeutung des zweiten Parameters wird darauf nicht näher eingegangen. Wenn Sie das Toolkit initialisiert haben, können Sie ein Widget einer bestimmten Klasse erzeugen. Dazu verwenden Sie praktisch eine Instanz. Zum Erzeugen eines Widgets wird auch hierbei wieder auf eine Funktion mit der ..Va..-Version zurückgegriffen - XtVaAppInitialize(). Als Beispiel wird hierbei ein Button der Klasse commandWidgetClass erzeugt, welche in der Headerdatei <X11/Xaw/Command.h> definiert ist.
quit = XtVaCreateManagedWidget (
"quit", commandWidgetClass,
w_root,
/* Eigenschaften des Buttons ... */
XtNheight, (XtArgVal) 20, /* Höhe */
XtNwidth, (XtArgVal) 50, /* Breite */
/* Hier könnten noch mehr Eigenschaften stehen ... */
NULL );
Damit erzeugen Sie ein Widget mit dem selbst definierten Widget-Namen quit und der Widget-Klasse commandWidgetClass. Die Eltern-Klasse des Buttons ist hier w_root, welche Sie zuvor mit der Funktion XtVaAppInitialize() erzeugt haben. Anschließend können Sie hier die Eigenschaften des Buttons wie Farbe, Größe, Position, Abstand usw. als variable Argumentenliste angeben, welche mit NULL terminiert werden muss. Die Elemente der variablen Argumentenliste müssen immer paarweise auftreten. Der erste der beiden Parameter muss ein Bezeichner der Form sein, der festlegt, was das zweite Argument bedeutet. Bei der Verwendung der variablen Argumentenliste spricht man von Hardcoding.
