Open Source im professionellen Einsatz
Linux-Magazin 03/2004
466

Schrittweise durch die Quellen

Der in den Listings 1 und 2 abgedruckte Sourcecode zeigt die Grundlagen der WX-Programmierung anhand eines sehr einfachen Texteditors (siehe Abbildungen 1 und 2). Der Header in Listing 1 deklariert die drei Klassen »HelloApp«, »HelloFrame« und »AboutDialog«. Als Kindklasse von »wxApp« ist »HelloApp« die Basisklasse der ganzen Applikation, »HelloFrame« zeigt Einzelheiten zum Eventhandling und »AboutDialog« führt in die Grundlagen der WX-eigenen Layoutstrategie ein.

Abbildung 1: Der Beispiel-Editor (140 Zeilen Quellcode, siehe Listings 1 und 2) ist hier mit der GTK-Fassung von WX-Windows gelinkt.

Abbildung 2: Dasselbe Programm wie in Abbildung 1, hier aber im Motif-Stil: WX-Windows ist ein einheitliches API zu verschiedenen Widget-Bibliotheken.

Das Ableiten einer Subklasse von »wxApp« ist der übliche Weg, um eine eigene Applikation zu erstellen. Meist genügt es, die »OnInit()«-Methode zu überschreiben, um die Anwendung zu initialisieren. Die Implementation in Listing 2 (Zeilen 9 bis 15) hat nicht viel zu tun. Sie erzeugt lediglich eine Instanz von »HelloFrame«, erklärt sie zum obersten Fenster und zeigt sie an.

Das Makro »DECLARE_APP(HelloApp)« in Listing 1, Zeile 13, fügt eine globale Funktion »wxGetApp()« ein, die eine Referenz auf die Instanz von »HelloApp« zurückgibt. Der »AboutDialog« in Zeile 15 ist eine einfache Kindklasse von »wxDialog« und benötigt lediglich einen Konstruktor. Die Zeilen 21 bis 42 beschreiben »HelloFrame«, das Hauptfenster des Editors. Das Makro »IMPLEMENT_APP(HelloApp)« in Listing 2, Zeile 7, ergänzt die Implementierungsdatei um eine Main-Funktion mit allen Aufrufen, die zum Start der Applikation erforderlich sind.

Der Konstruktor von »HelloFrame« erzeugt in den Zeilen 27 bis 38 (Listing 2) die Menüleiste der Anwendung. Hier fällt auf, dass der Code zwar Elemente im Freispeicher anlegt (»new«), die Klasse »HelloFrame« aber keinen Destruktor besitzt, der diese Elemente wieder zerstört würde (»delete«). Des Rätsels Lösung: WX übernimmt die fehleranfällige Destruktion selbst. Welche Menü-Elemente WX freigeben soll, weiß es, sobald das Programm sie mit »Append()« in das übergeordnete Element eingehängt hat (Zeilen 32 und 36).

Widgets einbinden

Das in Zeile 39 angelegte Textfeld zeigt die übliche Strategie, um Widgets zu erzeugen, deren Klasse von »wxWindow« erbt. Der erste Parameter des Konstruktors gibt das übergeordnete Element an. Wenn es ungleich »NULL« ist, zerstört WX die Kindelemente rekursiv, bevor es das Vaterelement zerstört. Es ist daher eine gute Strategie, bei WX-Windows alle Elemente im Freispeicher zu erzeugen und es der Bibliothek zu überlassen, Instanzen freizugeben.

Die Ereignisverarbeitung besteht bei WX-Programmen aus mehreren Teilen. Die Enum-Deklaration im Header (Listing 1 ab Zeile 35) erzeugt IDs, mit denen WX ein Ereignis einer verarbeitenden Methode zuordnet. Ein ID-Bereich ist für WX-interne Aufgaben reserviert. Um nicht versehentlich eine intern genutzte ID zu verwenden, beginnen die selbst definierten Event-IDs beim Wert »wxID_HIGHEST + 1«. Die Makros »wxID_LOWEST« und »wxID_HIGHEST« bezeichnen die untere und obere Grenze der internen IDs. In Zeile 42 fügt das Makro »DECLARE_EVENT_TABLE()« einige Variablen und Methodendeklarationen ein, um die Ereignisverarbeitung der Klasse vorzubereiten.

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Wir können auch anders

    Bisher vorgestellte Programme waren in funktionaler Weise implementiert. Schemes Stärken liegen zwar hauptsächlich in diesem Bereich, jedoch gibt es auch die Möglichkeit, objektorientiert vorzugehen.

  • Mit Schwung - ohne Swing

    Linux wird auf dem Desktop salonfähig, von Java ist dies leider nicht zu behaupten, zu gründlich wurde der Ruf schon vor Jahren ruiniert. Mit den Java-Language-Bindings ist aber eine performante und saubere Integration in das K Desktop Environment möglich.

  • Kleine Mahlzeit

    Es muss nicht immer ein ausgewachsenes Programm sein. Viele kleine Aufgaben lassen sich auch mit Applets erledigen, die im Panel residieren und nur darauf warten, aufgerufen zu werden.

  • Atom

    Githubs Editor Atom feierte kürzlich seinen ersten Geburtstag. Das Unternehmen bewirbt die extrem konfigurierbare freie Anwendung als Kompromiss zwischen Vi und Emacs auf der einen, Sublime und Textmate auf der anderen Seite. Auch im Rohzustand wirkt die Mischung schon vielversprechend.

  • Überall Punkte

    Microsofts Dotnet-Plattform steht Linux-Programmierern über die Projekte Mono und DotGNU zur Verfügung. Der Artikel untersucht, wie weit sich die alternativen Implementierungen für Projekte in der Praxis eignen. Im Mittelpunkt steht die Programmierung grafischer Benutzeroberflächen.

comments powered by Disqus

Ausgabe 11/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.