Bei unserem letzten GUI-Programm haben Sie sicherlich bemerkt, das es sich nicht korrekt beenden ließ und die Shell anschließend blockiert war. Grund dafür war, das die Shell einen korrekten Rückgabewert vom Programm erwartet und wir ausserdem die Endlosschleife  mit den Messagehandler nicht beendet haben.

Ausserdem hat das einbauen der main() und Project0Close() -Funktion in unser von GadToolsBox generiertem C-Sourcecode den grossen Nachteil, das wir bei jeder kleinen Änderung an unserer GUI (Fenster,Buttons usw.) alles nochmal machen dürfen, weil ein neuer Sourcecode generiert wird.

Wir werden es deshalb heute etwas eleganter angehen:

1. Wir erzeugen eine GUI mit GadToolsBox mit einem IDMCP-Handler (siehe vorherige Seite) und speichern den Code in eine Datei (z.B. gui.c)

2. wir erzeugen in dem gleichen Verzeichnis mit EditPad eine Datei namens main.c

dies Datei sollte in etwa so aussehen:

#include "gui.c"

/* Globale Variable zum Abschiessen (beenden) der Anwendung */

int laufzeit = 1;

 

   int Project0CloseWindow()

   {

       laufzeit = 0;

       return 10;

   }

 

 

   int Button1Clicked()

   {

       laufzeit = 0;

       return 10;

   }

 

 

   int main()

   {

       SetupScreen();

       OpenProject0Window();

  

           while(laufzeit == 1)

           {

               HandleProject0IDCMP();

           }

 

       CloseProject0Window();

       CloseDownScreen();

       return 10;

   }

So funktioniert es:

mit  #include “gui.c” binden wir die von GadToolsBox erzeugte Oberfläche in unser Programm ein. Die Anführungszeichen um gui.c sagen dem Compiler das er im Programmverzeichnis und nicht bei den anderen Includes suchen muss.

int laufzeit ist unsere Lauf- bzw. Abbruchbedingung. Solange laufzeit = 1 ist bleibt das Programm in der while Scheife , führt den Message-Handler aus und wartet auf Benutzereingaben. Die Funktionen CloseProject0Window() und Button1Click kennen wir ja schon aus unserem letzten Programm. Neu ist das wir ein klein wenig Funktionalität hinterlegt haben. So wir z.B. beim klicken des SCHLIESSEN Buttons (CloseProject0Window()) unsere laufzeitvariable auf 0 gesetzt wird.

Dadurch wird die while Schleife mit dem Message-Handler beendet und die Befehle darunter werden ausgeführt.

CloseProject0Window(); schließt unser Fenster

CloseDownScreen() schließt unseren Screen

return 10 teilt der Shell mit, das unser Programm ordnungsgemäß beendet wurde.

Um aus unserem Code jetzt ein ausführbares Programm zu erzeugen müssen wir die Datei mit der main() Funktion kompilieren. In unserem Fall die Datei main.c

Das geht wie gehabt mit dcc -3.1 main.c

Das auslagern von Programfunktionen in eine eigene Datei hat viele Vorteile. Zum einen lassen sich die einzelnen Bereiche getrennt betrachten, der Code wird übersichtlicher und es ist zumindest theoretisch möglich mit mehreren Leuten zu arbeiten. Es wäre z.B möglich das ein Programm schreibt, das Daten erfasst und verarbeitet und ein anderer ein Programm das diese Daten auf Festplatte speichert und ausdruckt. Eine dritte Person könnt das ganze dann unter einer GUI zusammenfassen und als ein Programm kompilieren.

Aber wie gesagt THEORETISCH das hört sich alles viel leichter an als es ist und als Anfänger sollte man da erst mal die Finger von lassen.

Auf der nächsten Seite ein Programmbeispiel.

<<<         >>>

Link nach...

Amiga C-Kurs

Link nach...

Downloads

Link nach...

Die Software

Link nach...

Das 1. Programm

Link nach...

Escape-Sequenzen

Link nach...

Variablen

Link nach...

ASCII-Code

Link nach...

Schleifen

Link nach...

1.GUI Programm

Link nach...

2. GUI Programm

Link nach...

Vorsicht Virus