Browse Source

Kommentare Eingefügt
Unfertiege und veraltete Klassen entfernt (Kam2D und Welt2D)
Vec4 in Ebene3D umbenannt
Einiege unpassende Namen geändert
ScrollBar System verbessert

Kolja Strohm 8 years ago
parent
commit
2e41c0bc98
50 changed files with 2139 additions and 1621 deletions
  1. 6 0
      .gitignore
  2. 20 9
      AlphaFeld.h
  3. 68 6
      Animation.h
  4. 3 3
      Array.h
  5. 3 3
      AuswahlBox.cpp
  6. 138 47
      AuswahlBox.h
  7. 29 20
      Bild.cpp
  8. 370 124
      Bild.h
  9. 118 41
      Bildschirm.h
  10. 3 0
      DXBuffer.h
  11. 1 1
      Diagramm.cpp
  12. 16 3
      DreieckListe.h
  13. 163 0
      Ebene3D.h
  14. 16 22
      Fenster.cpp
  15. 1 18
      Framework.vcxproj
  16. 46 63
      Framework.vcxproj.filters
  17. 1 1
      FrameworkMath.h
  18. 0 310
      Kam2D.cpp
  19. 0 78
      Kam2D.h
  20. 1 0
      Kam3D.h
  21. 1 1
      Liste.cpp
  22. 22 6
      M2DVorschau.h
  23. 1 0
      M3Datei.h
  24. 22 6
      Mat3.h
  25. 35 6
      Mat4.h
  26. 1 1
      MausEreignis.h
  27. 62 12
      Model2D.h
  28. 12 7
      Model3D.h
  29. 1 1
      Model3DList.h
  30. 26 12
      Rahmen.h
  31. 3 2
      Render3D.h
  32. 40 15
      RenderThread.h
  33. 162 274
      Scroll.cpp
  34. 114 82
      Scroll.h
  35. 3 0
      Shader.h
  36. 6 6
      Tabelle.cpp
  37. 349 54
      Tabelle.h
  38. 3 3
      TastaturEreignis.h
  39. 2 2
      TextFeld.cpp
  40. 1 1
      TextFeld.h
  41. 1 0
      TexturModel.h
  42. 7 0
      Thread.h
  43. 48 4
      Vec2.h
  44. 45 5
      Vec3.h
  45. 0 135
      Vec4.h
  46. 0 120
      Welt2D.cpp
  47. 0 54
      Welt2D.h
  48. 1 0
      Welt3D.h
  49. 4 4
      Zeichnung.cpp
  50. 164 59
      Zeichnung.h

+ 6 - 0
.gitignore

@@ -211,3 +211,9 @@ FakesAssemblies/
 GeneratedArtifacts/
 _Pvt_Extensions/
 ModelManifest.xml
+/Bilder/Thumbs.db
+/build.bat
+/Bilder/sKasten.gif
+/Bilder/normal.ltdb
+/Bilder/Kasten.gif
+/Framework.VC.db

+ 20 - 9
AlphaFeld.h

@@ -8,6 +8,7 @@ namespace Framework
 	class Bild; // Bild.h
 	class AlphaFeld; // Aus dieser Datei
 
+    // Eine Zeichnung des 2D GUI Frameworks, die einen Farbübergang zu einem Rechteck darstellt
 	class AlphaFeld : public Zeichnung
 	{
 	private:
@@ -18,16 +19,26 @@ namespace Framework
 	public:
 		// Konstruktor 
 		__declspec( dllexport ) AlphaFeld();
-		// nicht constant 
-		__declspec( dllexport ) void setStärke( int st ); // setzt die Stärke
-		__declspec( dllexport ) void setFarbe( int f ); // setzt die Farbe
-		__declspec( dllexport ) void render( Bild &zRObj ) override; // zeichnet nach zRObj
-		// constant 
-		__declspec( dllexport ) int getStärke() const; // gibt die Stärke zurück
-		__declspec( dllexport ) int getFarbe() const; // gibt die Farbe zurück
-		__declspec( dllexport ) Zeichnung *dublizieren() const override; // Kopiert das Zeichnung
-		// Reference Counting 
+		// Setzt die Stärke des Übergangs. Dies ist der Wert um den der Alpha Wert der Farbe für jeden Pixel nach innen abnimmt
+        //  st: Die Stärke
+		__declspec( dllexport ) void setStärke( int st );
+        // Setzt die Farbe des Alpha Feldes
+        //  f: Die Farbe im A8R8G8B8 Format
+		__declspec( dllexport ) void setFarbe( int f );
+        // Zeichnet die Zeihnung in ein bestimmtes Bild
+        //  zRObj: Das Bild, in das gezeichnet werden soll
+		__declspec( dllexport ) void render( Bild &zRObj ) override;
+		// Gibt die Stärke des Alpha Feldes zurück
+		__declspec( dllexport ) int getStärke() const;
+        // gibt die Farbe des Alpha Feldes im A8R8G8B8 Format zurück
+		__declspec( dllexport ) int getFarbe() const;
+        // Kopiert das Alpha Feld, so dass es ohne auswirkungen auf das Original verwendet werden kann
+		__declspec( dllexport ) Zeichnung *dublizieren() const override;
+        // Erhöht den Reference Counting Zähler.
+        //  return: this.
 		__declspec( dllexport ) AlphaFeld *getThis();
+        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
+        //  return: 0.
 		__declspec( dllexport ) AlphaFeld *release();
 	};
 }

+ 68 - 6
Animation.h

@@ -10,6 +10,7 @@ namespace Framework
 	class InitDatei; // InitDatei.h
 	class LRahmen; // Rahmen.h
 
+    // Enthält alle Bilder einer Video Animation
 	class Animation2DData
 	{
 	private:
@@ -26,27 +27,56 @@ namespace Framework
 		__declspec( dllexport ) Animation2DData();
 		// Destruktor
 		__declspec( dllexport ) ~Animation2DData();
-		// nicht constant
+        // Dies ist notwendig, falls mehrere Threads gleichzeitig dieses Objekt benutzen.
+        // Wenn lock() von zwei threads aufgerufen wird, wartet der letzte so lange, bis der erste unlock() aufgerufen hat.
 		__declspec( dllexport ) void lock();
+        // Dies ist notwendig, falls mehrere Threads gleichzeitig dieses Objekt benutzen.
+        // Wenn lock() von zwei threads aufgerufen wird, wartet der letzte so lange, bis der erste unlock() aufgerufen hat.
 		__declspec( dllexport ) void unlock();
+        // Lädt alle Bilder aus einer InitDatei ein. Auch die Werte 'fps', 'wiederhohlen' (true, false), 'transparent' (true, false) werden interpretiert.
+        // Die Bilder müssen in der richtiegen Reihenfolge in der Datei stehen. Der Name der Werte ist egal undder Wert ist der Pfad zur ltdb Datei mit /bildname hinten drann
+        // Beispiel: fps=30
+        //           x=a.ltdb\aaaa.jpg
+        //           y=a.ltdb\aaab.jpg
+        //  datei: Die bereits eingelesene InitDatei
 		__declspec( dllexport ) void ladeAnimation( InitDatei *datei );
+        // Lädt alle Bilder aus einer LTDB Datei der reihenfolge nach ein, in der sie gespeichert sind.
+        //  datei: Die LTDB Datei
 		__declspec( dllexport ) void ladeAnimation( LTDBDatei *datei );
+        // Setzt die Bilder pro Sekunde der Video Animation
+        //  fps: Die Anzahl an Bildern pro Sekunde
 		__declspec( dllexport ) void setFPS( int fps );
+        // Legt fest, ob die Animation sich wiederhohlt, wenn sie am ende angelangt ist
+        //  wh: 1, wenn sich die Animation wiederhohlen soll
 		__declspec( dllexport ) void setWiederhohlend( bool wh );
+        // Legt fest, ob beim Zeichnen der Bilder Alphablending benutzt werden soll
+        //  trp: 1, wenn Alphablending benutzt werden soll
 		__declspec( dllexport ) void setTransparent( bool trp );
+        // Löscht alle Bilder aus der Animation und setzt alle Werte auf die Standartwerte zurück
 		__declspec( dllexport ) void reset();
-		// constant
+		// Gibt ein Bestimmtes Bild der Animation zurück
+        //  i: Der Index des Bildes
 		__declspec( dllexport ) Bild *getBild( int i ) const;
+        // Gibt ein Bestimmtes Bild der Animation ohne erhöhten Reference Counter zurück
+        //  i: Der Index des Bildes
 		__declspec( dllexport ) Bild *zBild( int i ) const;
+        // Gibt die Anzahl der Bilder in der Animation zurück
 		__declspec( dllexport ) int getBildAnzahl() const;
+        // Gibt die Anzahl an Bildern pro Sekunde zurück
 		__declspec( dllexport ) int getFPS() const;
+        // Gibt zurück, ob sich die Animation wiederhohlt, wenn sie beim letzten Bild angelangt ist
 		__declspec( dllexport ) bool istWiederhohlend() const;
+        // Gibt zurück, ob beim Zeichnen der Bilder Alphablending benutzt wird
 		__declspec( dllexport ) bool istTransparent() const;
-		// Reference Counting
+        // Erhöht den Reference Counting Zähler.
+        //  return: this.
 		__declspec( dllexport ) Animation2DData *getThis();
+        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
+        //  return: 0.
 		__declspec( dllexport ) Animation2DData *release();
 	};
 
+    // Eine Zeichnung, die eine Video Animation zeichnet
 	class Animation2D : public Zeichnung
 	{
 	private:
@@ -67,31 +97,63 @@ namespace Framework
 		__declspec( dllexport ) Animation2D();
 		// Destruktor
 		__declspec( dllexport ) ~Animation2D();
-		// nicht constant
+		// Legt fest, ob ein Rahmen um die Animation gezeichnet werden soll
+        //  ram: 1, wenn ein Rahmen gezeichnet werden soll
 		__declspec( dllexport ) void setRahmen( bool ram );
+        // Setzt einen Zeiger auf den verfenteten Rahmen
+        //  ram: Der Rahmen
 		__declspec( dllexport ) void setRahmenZ( LRahmen *ram );
+        // Setzt die Breite des Rahmens
+        //  br: Die Breite in Pixeln
 		__declspec( dllexport ) void setRahmenBreite( int br );
+        // Setzt die Farbe des Rahmens
+        //  fc: Die Farbe im A8R8G8B8 Format
 		__declspec( dllexport ) void setRahmenFarbe( int fc );
+        // Setzt die Animation, die Angezeigt werden soll
+        //  data: Die Animationsdaten
 		__declspec( dllexport ) void setAnimationDataZ( Animation2DData *data );
+        // Setzt die Transparenz der gesammten Animation
+        //  alpha: Die Transparenz
 		__declspec( dllexport ) void setAlphaMaske( unsigned char alpha );
+        // Setzt die Geschwindigkeit, in der die Animation ein und ausgeblendet wird
+        //  aps: Alpha pro sekunde
 		__declspec( dllexport ) void setAPS( int aps );
+        // Setzt die Sichtbarkeit der Animation
+        //  sichtbar: 1, wenn die Animation eingeblendet werden soll. 0, wenn sie ausgeblendet werden soll
 		__declspec( dllexport ) void setSichtbar( bool sichtbar );
+        // Verarbeitet die Zeit, die seit dem letzten aufruf dieser Funktion vergangen ist
+        //  zeit: Die vergangene Zeit in Sekunden
 		__declspec( dllexport ) bool tick( double zeit ) override;
+        // Zeichnet die Animation in ein bestimmtes Bild
+        //  zRObj: Das Bild, in das gezeichnet werden soll
 		__declspec( dllexport ) void render( Bild &zRObj ) override;
-		// constant
+		// Gibt die Animationsdaten zurück
 		__declspec( dllexport ) Animation2DData *getAnimationData() const;
+        // Gibt die Animationsdaten ohne erhöhten Reference Counter zurück
 		__declspec( dllexport ) Animation2DData *zAnimationData() const;
+        // Gibt zurück ob die Animation sichtbar ist
 		__declspec( dllexport ) bool istSichtbar() const;
+        // Gibt den Index des aktuell angezeigten Bildes zurück
 		__declspec( dllexport ) int getJetzt() const;
+        // Gibt die Transparenz der Animation zurück
 		__declspec( dllexport ) unsigned char getAlphaMaske() const;
+        // Gibt zurück, ob ein Rahmen um die Animation gezeichnet wird
 		__declspec( dllexport ) bool hatRahmen() const;
+        // Gibt den Rahmen der Animation zurück
 		__declspec( dllexport ) LRahmen *getRahmen() const;
+        // Gibt den Rahmen der Animation ohne erhöhten Reference Counter zurück
 		__declspec( dllexport ) LRahmen *zRahmen() const;
+        // Gibt die Breite des Rahmens in Pixeln zurück
 		__declspec( dllexport ) int getRahmenBreite() const;
+        // Gibt die Farbe des Rahmens im A8R8G8B8 Format zurück
 		__declspec( dllexport ) int getRahmenFarbe() const;
+        // Kopiert die Animation, so dass sie ohne auswirkungen auf das Original verändert werden kann
 		__declspec( dllexport ) Zeichnung *dublizieren() const override;
-		// Reference Counting
+        // Erhöht den Reference Counting Zähler.
+        //  return: this.
 		__declspec( dllexport ) Animation2D *getThis();
+        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
+        //  return: 0.
 		__declspec( dllexport ) Animation2D *release();
 	};
 }

+ 3 - 3
Array.h

@@ -7,8 +7,8 @@
 
 namespace Framework
 {
-    // Ein Eintrag in einer Linked List
 	template< class TYP >
+    // Ein Eintrag in einer Linked List
 	struct ArrayEintrag
 	{
 		TYP var;
@@ -52,8 +52,8 @@ namespace Framework
 		}
 	};
 
-    // Eine Linked List von Klassen, die kein Reference Counting berteiben
 	template< class TYP >
+    // Eine Linked List von Klassen, die kein Reference Counting berteiben
 	class Array
 	{
 	private:
@@ -346,8 +346,8 @@ namespace Framework
 		}
 	};
 
-    // Eine Linked List von Zeigern auf Zeichnunge, die Reference Counting berteiben
 	template< class TYP >
+    // Eine Linked List von Zeigern auf Zeichnunge, die Reference Counting berteiben
 	class RCArray
 	{
 	private:

+ 3 - 3
AuswahlBox.cpp

@@ -944,7 +944,7 @@ void AuswahlBox::doMausEreignis( MausEreignis &me ) // Maus
 				rbr = rahmen->getRBreite();
 			if( ( ( me.mx > gr.x - 15 - rbr && me.my > gr.y ) || me.id == ME_UScroll || me.id == ME_DScroll ) && me.id != ME_Betritt && me.id != ME_Verlässt )
 			{
-                vertikalScrollBar->doMausMessage( gr.x - rbr - 15, gr.y, 15, vertikalScrollBar->getScrollData()->anzeigeHöhe, me );
+                vertikalScrollBar->doMausMessage( gr.x - rbr - 15, gr.y, 15, vertikalScrollBar->getScrollData()->anzeige, me );
 				me.verarbeitet = 1;
 			}
 		}
@@ -1256,7 +1256,7 @@ void AuswahlBox::render( Bild &zRObj ) // zeichnet nach zRObj
 			if( vsb && ausklappHöhe )
 			{
 				br -= 15;
-                vertikalScrollBar->getScrollData()->anzeigeHöhe = ausklappHöhe - rbr;
+                vertikalScrollBar->getScrollData()->anzeige = ausklappHöhe - rbr;
                 vertikalScrollBar->render( br - rbr, gr.y, 15, ausklappHöhe - rbr, zRObj );
 			}
 			if( ( ausklappHöhe && !zRObj.setDrawOptionsErzwingen( 0, gr.y, br - rbr, hö - rbr - gr.y ) ) || ( !ausklappHöhe && !zRObj.setDrawOptions( 0, gr.y, br - rbr, hö - rbr - gr.y ) ) )
@@ -1559,7 +1559,7 @@ void AuswahlBox::render( Bild &zRObj ) // zeichnet nach zRObj
 				dy += tf->getHöhe();
 			}
 			if( vertikalScrollBar )
-                vertikalScrollBar->getScrollData()->maxHöhe = maxHöhe;
+                vertikalScrollBar->getScrollData()->max = maxHöhe;
 			zRObj.releaseDrawOptions();
 		}
 		zRObj.releaseDrawOptions();

+ 138 - 47
AuswahlBox.h

@@ -14,33 +14,34 @@ namespace Framework
 	class Text; // Tet.h
 	class Schrift; // Schrift.h
 
+    // Eine Zeichnung des 2D GUI Frameworks. Repräsentiert eine Box, aus der der Nutzer durch ausklappen verschiedene Werte auswählen kann
 	class AuswahlBox : public ZeichnungHintergrund
 	{
     public:
         class Style : public ZeichnungHintergrund::Style
         {
         public:
-            const static __int64 FeldRahmen = 0x000001000;
-            const static __int64 FeldHintergrund = 0x000002000;
-            const static __int64 FeldHBild = 0x000004000;
-            const static __int64 FeldHAlpha = 0x000008000;
-            const static __int64 FeldBuffer = 0x000010000;
-            const static __int64 AuswahlHintergrund = 0x000020000;
-            const static __int64 AuswahlHBild = 0x000040000;
-            const static __int64 AuswahlHAlpha = 0x000080000;
-            const static __int64 AuswahlBuffer = 0x000100000;
-            const static __int64 AuswahlRahmen = 0x000200000;
-            const static __int64 MultiStyled = 0x000400000;
-            const static __int64 MaxHöhe = 0x004000000;
-            const static __int64 MausHintergrund = 0x008000000;
-            const static __int64 MausHBild = 0x010000000;
-            const static __int64 MausHAlpha = 0x020000000;
-            const static __int64 MausBuffer = 0x040000000;
-            const static __int64 MausRahmen = 0x080000000;
+            const static __int64 FeldRahmen = 0x000001000; // Wenn dieser Flag gesetzt ist, hat jeder Wert aus der Liste einen Rahmen
+            const static __int64 FeldHintergrund = 0x000002000; // Wenn dieser Flag gesetzt ist, hat jeder Wert aus der Liste einen Hintergrund
+            const static __int64 FeldHBild = 0x000004000; // Wenn dieser Flag gesetzt ist, hat jeder Wert aus der Liste ein Bild als Hintergrund
+            const static __int64 FeldHAlpha = 0x000008000; // Wenn dieser Flag gesetzt ist, hat jeder Wert aus der Liste einen Transparenten Hintergrund
+            const static __int64 FeldBuffer = 0x000010000; // Wenn dieser Flag gesetzt ist, hat jeder Wert aus der Liste einen Farbübergang
+            const static __int64 AuswahlHintergrund = 0x000020000; // Wenn dieser Flag gesetzt ist, bekommt der Wert, der gerade ausgewählt ist einen Hintergrund
+            const static __int64 AuswahlHBild = 0x000040000; // Wenn dieser Flag gesetzt ist, bekommt der Wert, der gerade ausgewählt ist ein Hintergrundbild
+            const static __int64 AuswahlHAlpha = 0x000080000; // Wenn dieser Flag gesetzt ist, bekommt der Wert, der gerade ausgewählt ist einen transparenten Hintergrund
+            const static __int64 AuswahlBuffer = 0x000100000; // Wenn dieser Flag gesetzt ist, bekommt der Wert, der gerade ausgewählt ist einen Farbübergang
+            const static __int64 AuswahlRahmen = 0x000200000; // Wenn dieser Flag gesetzt ist, bekommt der Wert, der gerade ausgewählt ist einen Rahmen
+            const static __int64 MultiStyled = 0x000400000; // Wenn dieser Flag gesetzt ist, hat jeder Wert seine eigenen Hintergründe unt Rahmen und nicht alle die selben
+            const static __int64 MaxHöhe = 0x004000000; // Legt eine maximale Höhe der ausgeklappten Liste fest. Es erscheint automatisch eine Scrollbar wenn mehr Elemente da sind als sichtbar sein können
+            const static __int64 MausHintergrund = 0x008000000; // Wenn dieser Flag gesetzt ist, hat ein Element, wo die Maus drau zeigt, einen Hintergrund
+            const static __int64 MausHBild = 0x010000000; // Wenn dieser Flag gesetzt ist, hat ein Element, wo die Maus drauf zeigt, ein Hintergrundbild
+            const static __int64 MausHAlpha = 0x020000000; // Wenn dieser Flag gesetzt ist, hat ein Element, wo die Maus drauf zeigt, einen transparenten Hintergrund
+            const static __int64 MausBuffer = 0x040000000; // Wenn dieser Flag gesetzt ist, hat ein Element, wo die Maus drauf zeigt, einen Farbübergang
+            const static __int64 MausRahmen = 0x080000000; // Wenn dieser Flag gesetzt ist, hat ein Element, wo die Maus drauf zeigt, einen Rahmen
             //const int NachObenAusklappen	= 0x100000000;
             //const int AutoAusklappRichtung	= 0x200000000;
 
-            const static __int64 Normal = Sichtbar | Erlaubt | Rahmen | FeldRahmen | AuswahlBuffer | AuswahlRahmen | MaxHöhe | VScroll | MausRahmen | MausBuffer;
+            const static __int64 Normal = Sichtbar | Erlaubt | Rahmen | FeldRahmen | AuswahlBuffer | AuswahlRahmen | MaxHöhe | VScroll | MausRahmen | MausBuffer; // Normaler Style: Sichtbar, Erlaubt, Rahmen, FeldRahmen, AuswahlBuffer, AuswahlRahmen, MaxHöhe, VScroll, MausRahmen, MausBuffer
         };
 	private:
 		Schrift *schrift;
@@ -81,42 +82,132 @@ namespace Framework
 		__declspec( dllexport ) AuswahlBox();
 		// Destruktor 
 		__declspec( dllexport ) ~AuswahlBox();
-		// nicht constant
-		__declspec( dllexport ) void setEventParam( void *p ); // setzt den Event Parameter
-		__declspec( dllexport ) void setEventAktion( void( *eAk )( void *p, AuswahlBox *, int, int ) ); // setzt die Event Funktion
-		__declspec( dllexport ) void setSchriftZ( Schrift *schrift ); // setzt die schrift
-		__declspec( dllexport ) void addEintrag( const char *txt ); // Eintrag hinzufügen
+		// Setzt den Parameter der Rückruffunktion, die aufgerufen wird, wenn der Benutzer ein neues element auswählt
+        //  p: Der Parameter
+		__declspec( dllexport ) void setEventParam( void *p );
+        // Setzt die Rückruffunktion, die Aufgerufen wird, wenn der Benutzer ein neues Element auswählt
+        //  eAk: Die Rückruffunktion
+        __declspec( dllexport ) void setEventAktion( void( *eAk )( void *p, AuswahlBox *, int, int ) );
+        // Setzt die verwendete Schrift
+        //  schrift: Die Schrift
+		__declspec( dllexport ) void setSchriftZ( Schrift *schrift );
+        // Fügt der Liste einen auswählbaren Eintrag hinzu. Der erste Eintrag ist zu Beginn automatisch ausgewählt
+        //  txt: Der Text des Eintrags
+		__declspec( dllexport ) void addEintrag( const char *txt );
+        // Fügt der Liste einen auswählbaren Eintrag hinzu. Der erste Eintrag ist zu Beginn automatisch ausgewählt
+        //  txt: Der Text des Eintrags
 		__declspec( dllexport ) void addEintrag( Text *txt );
+        // Fügt der Liste einen auswählbaren Eintrag hinzu. Der erste Eintrag ist zu Beginn automatisch ausgewählt
+        //  txt: Ein Zeiger auf den Eintrag
 		__declspec( dllexport ) void addEintragZ( TextFeld *txt );
-		__declspec( dllexport ) void setEintrag( int i, const char *txt ); // Eintrag setzen
+        // Ändert den Text eines Eintrags
+        //  i: Der Index des Eintrags
+        //  txt: Der neue Text
+		__declspec( dllexport ) void setEintrag( int i, const char *txt );
+        // Ändert den Text eines Eintrags
+        //  i: Der Index des Eintrags
+        //  txt: Der neue Text
 		__declspec( dllexport ) void setEintrag( int i, Text *txt );
+        // Ändert einen Eintrag
+        //  i: Der Index des Eintrags
+        //  txt: Ein Zeiger auf den neuen Eintrag
 		__declspec( dllexport ) void setEintragZ( int i, TextFeld *txt );
-		__declspec( dllexport ) void löscheEintrag( int i ); // Eintrag entfernen
-		__declspec( dllexport ) void setAusklappKnopfZ( Knopf *ausK ); // Ausklapp Knopf setzen
-		__declspec( dllexport ) void setEintragRahmenZ( int i, LRahmen *rahmen ); // Eintrag Rahmen setzen
-		__declspec( dllexport ) void setEintragRahmenFarbe( int i, int f ); // Eintrag Rahmen Farbe setzen
-		__declspec( dllexport ) void setEintragRahmenBreite( int i, int rbr ); // Eintrag Rahmen Breite setzen
-		__declspec( dllexport ) void setEintragHintergrundFarbe( int i, int f ); // Eintrag Hintergrund farbe setzen
-		__declspec( dllexport ) void setEintragHintergrundBildZ( int i, Bild *bgB ); // Eintrag Hintergrund Bild setzen
+        // Löscht einen Eintrag
+        //  i: Der Index des Eintrags
+		__declspec( dllexport ) void löscheEintrag( int i );
+        // Setzt einen Zeiger auf den Knopf, der zum aus und einklappen der Liste verwendet wird
+        //  ausK: Der Knopf
+		__declspec( dllexport ) void setAusklappKnopfZ( Knopf *ausK );
+        // Setzt einen Zeiger auf einen Rahmen, der für einen bestimmten Eintrag benutzt wird
+        //  i: Der Index des Eintrags
+        //  rahmen: Der Rahemn
+		__declspec( dllexport ) void setEintragRahmenZ( int i, LRahmen *rahmen );
+        // Setzt die Farbe eines Rahmens, der für einen bestimmten Eintrag benutzt wird
+        //  i: Der Index des Eintrags
+        //  f: Die farbe im A8R8G8B8 Format
+		__declspec( dllexport ) void setEintragRahmenFarbe( int i, int f );
+        // Setzt die Breite eines Rahmens, der für einen bestimmten Eintrag benutzt wird
+        //  i: Der Index des Eintrags
+        //  rbr: Die Breite des Rahmens in Pixeln
+		__declspec( dllexport ) void setEintragRahmenBreite( int i, int rbr );
+        // Setzt eine Hintergrund Farbe, die für einen bestimmten Eintrag benutzt wird
+        //  i: Der Index des Eintrags
+        //  f: Die farbe im A8R8G8B8 Format
+		__declspec( dllexport ) void setEintragHintergrundFarbe( int i, int f );
+        // Setzt einen zeiger auf ein Hintergrund Bild, das für einen bestimmten Eintrag benutzt wird
+        //  i: Der Index des Eintrags
+        //  bgB: Das Hintergrund Bild
+		__declspec( dllexport ) void setEintragHintergrundBildZ( int i, Bild *bgB );
+        // Setzt ein Hintergrund Bild durch Kopieren, das für einen bestimmten Eintrag benutzt wird
+        //  i: Der Index des Eintrags
+        //  bgB: Das Hintergrund Bild
 		__declspec( dllexport ) void setEintragHintergrundBild( int i, Bild *bgB );
-		__declspec( dllexport ) void setEintragAlphaFeldZ( int i, AlphaFeld *af ); // Eintrag AlphaFeld setzen
-		__declspec( dllexport ) void setEintragAlphaFeldFarbe( int i, int afF ); // Eintrag AlphaFeld Farbe setzen
-		__declspec( dllexport ) void setEintragAlphaFeldStärke( int i, int afSt ); // Eintrag AlphaFeld Stärke setzen
-		__declspec( dllexport ) void setAuswRahmenZ( LRahmen *rahmen ); // Auswahl Rahmen setzen
-		__declspec( dllexport ) void setAuswRahmenFarbe( int f ); // Auswahl Rahmen Farbe setzen
-		__declspec( dllexport ) void setAuswRahmenBreite( int rbr ); // Auswahl Rahmen Breite setzen
-		__declspec( dllexport ) void setAuswHintergrundFarbe( int f ); // Auswahl Hintergrund Farbe setzen
-		__declspec( dllexport ) void setAuswHintergrundBildZ( Bild *bgB ); // Auswahl Hintergrund Bild setzen
+        // Setzt einen zeiger auf einen Farbübergangn, der für einen bestimmten Eintrag benutzt wird
+        //  i: Der Index des Eintrags
+        //  af: Der Farbübergang
+		__declspec( dllexport ) void setEintragAlphaFeldZ( int i, AlphaFeld *af );
+        // Setzt dei Farbe eines Farbübergangns, der für einen bestimmten Eintrag benutzt wird
+        //  i: Der Index des Eintrags
+        //  afF: Die Farbe im A8R8G8B8 Format
+		__declspec( dllexport ) void setEintragAlphaFeldFarbe( int i, int afF );
+        // Setzt dei Stärke eines Farbübergangns, der für einen bestimmten Eintrag benutzt wird
+        //  i: Der Index des Eintrags
+        //  afSt: Die Stärke
+		__declspec( dllexport ) void setEintragAlphaFeldStärke( int i, int afSt );
+        // Setzt eienen Zeiger auf einen Rahmen, der bei dem ausgewählten Eintrag verwendet wird
+        //  rahmen: Der Rahmen
+		__declspec( dllexport ) void setAuswRahmenZ( LRahmen *rahmen );
+        // Setzt die Farbe eines Rahmens, der bei dem ausgewählten Eintrag verwendet wird
+        //  f: Die Farbe im A8R8G8B8 Format
+		__declspec( dllexport ) void setAuswRahmenFarbe( int f );
+        // Setzt die Breite eines Rahmens, der bei dem ausgewählten Eintrag verwendet wird
+        //  rbr: Die Breite in Pixeln
+		__declspec( dllexport ) void setAuswRahmenBreite( int rbr );
+        // Setzt die Hintergrund Farbe, die bei dem ausgewählten Eintrag verwendet wird
+        //  f: Die Farbe im A8R8G8B8 Format
+		__declspec( dllexport ) void setAuswHintergrundFarbe( int f );
+        // Setzt den Zeiger auf ein Hintergrund Bild, das bei dem ausgewählten Eintrag verwendet wird
+        //  bgB: Das Bild
+		__declspec( dllexport ) void setAuswHintergrundBildZ( Bild *bgB );
+        // Setzt ein Hintergrund Bild durch kopieren, das bei dem ausgewählten Eintrag verwendet wird
+        //  bgB: Das Bild
 		__declspec( dllexport ) void setAuswHintergrundBild( Bild *bgB );
-		__declspec( dllexport ) void setAuswAlphaFeldZ( AlphaFeld *af ); // Auswahl AlphaFeld setzen
-		__declspec( dllexport ) void setAuswAlphaFeldFarbe( int afF ); // Auswahl AlphaFeld Farbe setzen
-		__declspec( dllexport ) void setAuswAlphaFeldStärke( int afSt ); // Auswahl Alpha Feld stärke setzen
-		__declspec( dllexport ) void setMsAuswRahmenZ( int i, LRahmen *rahmen ); // Multistyle Auswahl Rahmen setzen
-		__declspec( dllexport ) void setMsAuswRahmenFarbe( int i, int f ); // Multistyle Auswahl Rahmen Farbe setzen
-		__declspec( dllexport ) void setMsAuswRahmenBreite( int i, int rbr ); // Multistyle Auswahl Breite setzen
-		__declspec( dllexport ) void setMsAuswHintergrundFarbe( int i, int f ); // Multistyle Auswahl Hintergrund Farbe setzen
-		__declspec( dllexport ) void setMsAuswHintergrundBildZ( int i, Bild *bgB ); // Multistyle Auswahl Hintergrund Bild setzen
+        // Setzt den Zeiger auf einen Farbübergang, der bei dem ausgewählten Eintrag verwendet wird
+        //  af: Der Farbübergang
+		__declspec( dllexport ) void setAuswAlphaFeldZ( AlphaFeld *af );
+        // Setzt die Farbe eines Farbübergangs, der bei dem ausgewählten Eintrag verwendet wird
+        //  afF: Die Farbe im A8R8G8B8 Format
+		__declspec( dllexport ) void setAuswAlphaFeldFarbe( int afF );
+        // Setzt die Stärke eines Farbübergangs, der bei dem ausgewählten Eintrag verwendet wird
+        //  afSt: Die Stärke
+		__declspec( dllexport ) void setAuswAlphaFeldStärke( int afSt );
+        // Setzt eienen Zeiger auf einen Rahmen, der bei dem Flag MultiStyled bei der Auswahl eines bestimmten Eintrags verwendet wird
+        //  i: Der Index des Eintrags
+        //  rahmen: Der Rahmen
+		__declspec( dllexport ) void setMsAuswRahmenZ( int i, LRahmen *rahmen );
+        // Setzt die Farbe einens Rahmens, der bei dem Flag MultiStyled bei der Auswahl eines bestimmten Eintrags verwendet wird
+        //  i: Der Index des Eintrags
+        //  f: Die Farbe im A8R8G8B8 Format
+		__declspec( dllexport ) void setMsAuswRahmenFarbe( int i, int f );
+        // Setzt die Breite einens Rahmens, der bei dem Flag MultiStyled bei der Auswahl eines bestimmten Eintrags verwendet wird
+        //  i: Der Index des Eintrags
+        //  rbr: Die Breite in Pixeln
+		__declspec( dllexport ) void setMsAuswRahmenBreite( int i, int rbr );
+        // Setzt die Hintergrundfarbe, die bei dem Flag MultiStyled bei der Auswahl eines bestimmten Eintrags verwendet wird
+        //  i: Der Index des Eintrags
+        //  f: Die Farbe im A8R8G8B8 Format
+		__declspec( dllexport ) void setMsAuswHintergrundFarbe( int i, int f );
+        // Setzt eienen Zeiger auf eine Hintergrund Bild, das bei dem Flag MultiStyled bei der Auswahl eines bestimmten Eintrags verwendet wird
+        //  i: Der Index des Eintrags
+        //  bgB: Das Bild
+		__declspec( dllexport ) void setMsAuswHintergrundBildZ( int i, Bild *bgB );
+        // Setzt eien Hintergrund Bild durch kopieren, das bei dem Flag MultiStyled bei der Auswahl eines bestimmten Eintrags verwendet wird
+        //  i: Der Index des Eintrags
+        //  bgB: Das Bild
 		__declspec( dllexport ) void setMsAuswHintergrundBild( int i, Bild *bgB );
+        // Setzt eienen Zeiger auf einen Farbverlauf, der bei dem Flag MultiStyled bei der Auswahl eines bestimmten Eintrags verwendet wird
+        //  i: Der Index des Eintrags
+        //  af: Der Farbverlauf
 		__declspec( dllexport ) void setMsAuswAlphaFeldZ( int i, AlphaFeld *af ); // Multistyle Auswahl AlphaFeld setzen
 		__declspec( dllexport ) void setMsAuswAlphaFeldFarbe( int i, int afF ); // Multistyle Auswahl AlphaFeld Farbe setzen
 		__declspec( dllexport ) void setMsAuswAlphaFeldStärke( int i, int afSt ); // Multistyle Auswahl AlphaFeld stärke setzen

+ 29 - 20
Bild.cpp

@@ -314,6 +314,7 @@ void Bild::setFarbe( int f )
         for( int *i = fc, *end = i + größe.x * größe.y; i < end; i++ )
             *i = f;
     }
+    rend = 1;
 }
 
 void Bild::füllRegion( int x, int y, int b, int h, int ff )
@@ -444,6 +445,7 @@ void Bild::alphaPixelDP( int x, int y, int f )
         cf[ 3 ] = ( cf[ 3 ] > alpha[ alphaAnzahl ] ) * ( cf[ 3 ] - alpha[ alphaAnzahl ] );
     }
     alphaPixelP( fc[ x + y * größe.x ], f );
+    rend = 1;
 }
 
 void Bild::alphaPixelDP( int i, int f )
@@ -451,6 +453,7 @@ void Bild::alphaPixelDP( int i, int f )
     int x = i % größe.x;
     int y = i / größe.x;
     alphaPixelDP( x, y, f );
+    rend = 1;
 }
 
 void Bild::setPixelDP( int x, int y, int f )
@@ -469,6 +472,7 @@ void Bild::setPixelDP( int x, int y, int f )
     if( x < dpx || y < dpy || x > dgx || y > dgy )
         return;
     fc[ x + y * größe.x ] = f;
+    rend = 1;
 }
 
 void Bild::setPixelDP( int i, int f )
@@ -476,6 +480,7 @@ void Bild::setPixelDP( int i, int f )
     int x = i % größe.x;
     int y = i / größe.x;
     setPixelDP( x, y, f );
+    rend = 1;
 }
 
 void Bild::drawLinieH( int x, int y, int län, int f ) // zeichnet eine horizontale Linie
@@ -1459,6 +1464,7 @@ void Bild::drawDreieck( Punkt a, Punkt b, Punkt c, int farbe ) // f
             drawFlatDreieck( b.y, c.y, m3, b3, m2, b2, farbe );
         }
     }
+    rend = 1;
 }
 
 void Bild::drawDreieckTextur( Punkt a, Punkt b, Punkt c, Punkt ta, Punkt tb, Punkt tc, Bild &textur ) // füllt eine Dreieck aus
@@ -1598,6 +1604,7 @@ void Bild::drawDreieckTextur( Punkt a, Punkt b, Punkt c, Punkt ta, Punkt tb, Pun
         }
         drawFlatDreieckTextur( b.y, c.y, m3, b3, m2, b2, tb.x, tb.y, q.x, q.y, tx1o, ty1o, tx2o, ty2o, txf, tyf, textur );
     }
+    rend = 1;
 }
 
 void Bild::drawDreieckAlpha( Punkt a, Punkt b, Punkt c, int farbe ) // füllt eine Dreieck aus
@@ -1665,6 +1672,7 @@ void Bild::drawDreieckAlpha( Punkt a, Punkt b, Punkt c, int farbe ) // f
             drawFlatDreieckAlpha( b.y, c.y, m3, b3, m2, b2, farbe );
         }
     }
+    rend = 1;
 }
 
 void Bild::drawDreieckTexturAlpha( Punkt a, Punkt b, Punkt c, Punkt ta, Punkt tb, Punkt tc, Bild &textur ) // füllt eine Dreieck aus
@@ -1799,6 +1807,7 @@ void Bild::drawDreieckTexturAlpha( Punkt a, Punkt b, Punkt c, Punkt ta, Punkt tb
         }
         drawFlatDreieckTexturAlpha( b.y, c.y, m3, b3, m2, b2, tb.x, tb.y, q.x, q.y, tx1o, ty1o, tx2o, ty2o, txf, tyf, textur );
     }
+    rend = 1;
 }
 
 bool Bild::setDrawOptions( const Punkt &pos, const Punkt &gr ) // setzt die Drawoptionen
@@ -1956,9 +1965,9 @@ Bild *Bild::release()
 
 
 #ifdef WIN32
-// Inhalt der BildO Klasse aus Bild.h
+// Inhalt der BildZ Klasse aus Bild.h
 // Konstruktor 
-BildO::BildO()
+BildZ::BildZ()
     : ZeichnungHintergrund(),
     bild( 0 ),
     ref( 1 )
@@ -1968,14 +1977,14 @@ BildO::BildO()
 }
 
 // Destruktor 
-BildO::~BildO()
+BildZ::~BildZ()
 {
     if( bild )
         bild->release();
 }
 
 // nicht constant 
-void BildO::setBildZ( Bild *b ) // setzt das Bild
+void BildZ::setBildZ( Bild *b ) // setzt das Bild
 {
     if( bild )
         bild->release();
@@ -1984,12 +1993,12 @@ void BildO::setBildZ( Bild *b ) // setzt das Bild
         vertikalScrollBar = new VScrollBar();
     if( !horizontalScrollBar )
         horizontalScrollBar = new HScrollBar();
-    horizontalScrollBar->getScrollData()->maxBreite = b->getBreite();
-    vertikalScrollBar->getScrollData()->maxHöhe = b->getHöhe();
+    horizontalScrollBar->getScrollData()->max = b->getBreite();
+    vertikalScrollBar->getScrollData()->max = b->getHöhe();
     rend = 1;
 }
 
-void BildO::setBild( Bild *b )
+void BildZ::setBild( Bild *b )
 {
     if( !bild )
         bild = new Bild();
@@ -1999,18 +2008,18 @@ void BildO::setBild( Bild *b )
         vertikalScrollBar = new VScrollBar();
     if( !horizontalScrollBar )
         horizontalScrollBar = new HScrollBar();
-    horizontalScrollBar->getScrollData()->maxBreite = b->getBreite();
-    vertikalScrollBar->getScrollData()->maxHöhe = b->getHöhe();
+    horizontalScrollBar->getScrollData()->max = b->getBreite();
+    vertikalScrollBar->getScrollData()->max = b->getHöhe();
     b->release();
     rend = 1;
 }
 
-bool BildO::tick( double tickVal ) // tick
+bool BildZ::tick( double tickVal ) // tick
 {
     return __super::tick( tickVal );
 }
 
-void BildO::doMausEreignis( MausEreignis &me ) // ruft Mak auf
+void BildZ::doMausEreignis( MausEreignis &me ) // ruft Mak auf
 {
     if( me.verarbeitet || !( me.mx >= pos.x && me.mx <= pos.x + gr.x && me.my >= pos.y && me.my <= pos.y + gr.y ) )
     {
@@ -2072,7 +2081,7 @@ void BildO::doMausEreignis( MausEreignis &me ) // ruft Mak auf
     me.my += pos.y;
 }
 
-void BildO::render( Bild &zRObj ) // zeichnet nach zRObj
+void BildZ::render( Bild &zRObj ) // zeichnet nach zRObj
 {
     if( hatStyle( Style::Sichtbar ) )
     {
@@ -2105,9 +2114,9 @@ void BildO::render( Bild &zRObj ) // zeichnet nach zRObj
                     return;
                 }
                 if( hatStyle( Style::Alpha ) )
-                    zRObj.alphaBild( -horizontalScrollBar->getScrollData()->anzeigeBeginn, -vertikalScrollBar->getScrollData()->anzeigeBeginn, bild->getBreite(), bild->getHöhe(), *bild );
+                    zRObj.alphaBild( -horizontalScrollBar->getScroll(), -vertikalScrollBar->getScroll(), bild->getBreite(), bild->getHöhe(), *bild );
                 else
-                    zRObj.drawBild( -horizontalScrollBar->getScrollData()->anzeigeBeginn, -vertikalScrollBar->getScrollData()->anzeigeBeginn, bild->getBreite(), bild->getHöhe(), *bild );
+                    zRObj.drawBild( -horizontalScrollBar->getScroll(), -vertikalScrollBar->getScroll(), bild->getBreite(), bild->getHöhe(), *bild );
                 zRObj.releaseDrawOptions();
             }
         }
@@ -2117,21 +2126,21 @@ void BildO::render( Bild &zRObj ) // zeichnet nach zRObj
 }
 
 // constant 
-Bild *BildO::getBild() const // gibt das Bild zurück
+Bild *BildZ::getBild() const // gibt das Bild zurück
 {
     if( bild )
         return bild->getThis();
     return 0;
 }
 
-Bild *BildO::zBild() const
+Bild *BildZ::zBild() const
 {
     return bild;
 }
 
-Zeichnung *BildO::dublizieren() const // erstellt eine Kopie des Zeichnungs
+Zeichnung *BildZ::dublizieren() const // erstellt eine Kopie des Zeichnungs
 {
-    BildO *obj = new BildO();
+    BildZ *obj = new BildZ();
     obj->setPosition( pos );
     obj->setGröße( gr );
     obj->setMausEreignisParameter( makParam );
@@ -2155,13 +2164,13 @@ Zeichnung *BildO::dublizieren() const // erstellt eine Kopie des Zeichnungs
 }
 
 // Reference Counting 
-BildO *BildO::getThis()
+BildZ *BildZ::getThis()
 {
     ++ref;
     return this;
 }
 
-BildO *BildO::release()
+BildZ *BildZ::release()
 {
     --ref;
     if( !ref )

+ 370 - 124
Bild.h

@@ -10,147 +10,393 @@
 
 namespace Framework
 {
-	class Bild; // aus dieser Datei
+    class Bild; // aus dieser Datei
 #ifdef WIN32
-	class VScrollBar; // Scroll.h
-	class HScrollBar; // Scroll.h
-	struct VScrollData; // Scroll.h
-	struct HScrollData; // Scroll.h
-	class LRahmen; // Rahmen.h
-	struct MausEreignis; // Mausereignis.h
-	class BildO; // aus dieser Datei
+    class VScrollBar; // Scroll.h
+    class HScrollBar; // Scroll.h
+    struct VScrollData; // Scroll.h
+    struct HScrollData; // Scroll.h
+    class LRahmen; // Rahmen.h
+    struct MausEreignis; // Mausereignis.h
     class Text; // Text.h
 #endif
 
-	class Bild
-	{
-	private:
-		int *fc;
-		bool delFc;
-		Punkt größe;
-		int ref;
-		Punkt *drawOff;
-		Punkt *dPosA;
-		Punkt *dGrößeA;
-		int doa;
-		unsigned char *alpha;
-		int alphaAnzahl;
-		bool rend;
+    // Verwaltet ein Bild als Array von Pixel Farben im A8R8G8B8 Format, in den gezeichnet werden kann
+    class Bild
+    {
+    private:
+        int *fc;
+        bool delFc;
+        Punkt größe;
+        int ref;
+        Punkt *drawOff;
+        Punkt *dPosA;
+        Punkt *dGrößeA;
+        int doa;
+        unsigned char *alpha;
+        int alphaAnzahl;
+        bool rend;
         bool alpha3D;
-		// privat
-		inline void alphaPixelP( int x, int y, int f );
-		inline void alphaPixelP( int &fc, int f );
-		inline char getOutCode( Punkt& p ) const;
-		void drawFlatDreieck( int y1, int y2, float m1, float b1, float m2, float b2, int farbe );
-		void drawFlatDreieckTextur( int y1, int y2, double m1, double b1, double m2, double b2, double tx1, double ty1, double tx2, double ty2,
-									double tx_1o, double ty_1o, double tx_2o, double ty_2o, double txf, double tyf, Bild &textur );
-		void drawFlatDreieckAlpha( int y1, int y2, float m1, float b1, float m2, float b2, int farbe );
-		void drawFlatDreieckTexturAlpha( int y1, int y2, double m1, double b1, double m2, double b2, double tx1, double ty1, double tx2, double ty2,
-										 double tx_1o, double ty_1o, double tx_2o, double ty_2o, double txf, double tyf, Bild &textur );
-		void drawLinieHTextur( Vec2< double > p, double län, Vec2< double > ta, Vec2< double > tb, double txo, double tyo, Bild &textur );
-		void drawLinieHTexturAlpha( Vec2< double > p, double län, Vec2< double > ta, Vec2< double > tb, double txo, double tyo, Bild &textur );
-	
-	public:
-		// Konstruktor 
-		__declspec( dllexport ) Bild( bool options = 0 );
-		// Destruktor 
-		__declspec( dllexport ) ~Bild(); 
+
+        // privat
+        inline void alphaPixelP( int x, int y, int f );
+        inline void alphaPixelP( int &fc, int f );
+        inline char getOutCode( Punkt& p ) const;
+        void drawFlatDreieck( int y1, int y2, float m1, float b1, float m2, float b2, int farbe );
+        void drawFlatDreieckTextur( int y1, int y2, double m1, double b1, double m2, double b2, double tx1, double ty1, double tx2, double ty2,
+                                    double tx_1o, double ty_1o, double tx_2o, double ty_2o, double txf, double tyf, Bild &textur );
+        void drawFlatDreieckAlpha( int y1, int y2, float m1, float b1, float m2, float b2, int farbe );
+        void drawFlatDreieckTexturAlpha( int y1, int y2, double m1, double b1, double m2, double b2, double tx1, double ty1, double tx2, double ty2,
+                                         double tx_1o, double ty_1o, double tx_2o, double ty_2o, double txf, double tyf, Bild &textur );
+        void drawLinieHTextur( Vec2< double > p, double län, Vec2< double > ta, Vec2< double > tb, double txo, double tyo, Bild &textur );
+        void drawLinieHTexturAlpha( Vec2< double > p, double län, Vec2< double > ta, Vec2< double > tb, double txo, double tyo, Bild &textur );
+
+    public:
+        // Konstruktor
+        //  options: 1, wenn das Bild Buffer zum Zeichnen anlegen soll, wie zum Beispiel für temporäre Zeichnenflächen Begrenzungen und Transparenz Filter
+        //  Verbraucht etwa 50 kb mehr Arbeitsspeicher pro Bild
+        __declspec( dllexport ) Bild( bool options = 0 );
+        // Destruktor 
+        __declspec( dllexport ) ~Bild();
         // Wird dieser Flag gesetzt, so wird beim Alpha Blending wenn die vorheriege Farbe 0 ist nur die neue mit ihrem Alpha Wert kopiert.
-        // Das ist sinnvoll für die Verwendung im 3DBildschirm, wo das Gezeichnette Bild später mittels Alpha Blending angezeigt wird
+        // Das ist sinnvoll für die Verwendung im 3DBildschirm, wo das Gezeichnette Bild später mittels Alpha Blending angezeigt wird.
+        // Der Flag wird im 3DBildschirm automatisch gesetzt
         __declspec( dllexport ) void setAlpha3D( bool erlaubt );
- 		__declspec( dllexport ) void setAlpha( unsigned char alpha ); // setzt die Transparenz der nachfolgenden Zeichnunge
-		__declspec( dllexport ) void releaseAlpha(); // Löscht alpha
-		__declspec( dllexport ) void setPixelBuffer( int *buffer, bool deleteBuffer, int breite, int höhe ); // setzt den Zeiger auf die Pixel des Bildes
-		__declspec( dllexport ) void neuBild( int breite, int höhe, int füllFarbe ); // erzeugt ein neues Bild mit der Hintergrundfarbe füllFarbe
-		__declspec( dllexport ) void alphaPixel( int x, int y, int f );
-		__declspec( dllexport ) void alphaPixel( int i, int f );
-		__declspec( dllexport ) void alphaPixelDP( int x, int y, int f );
-		__declspec( dllexport ) void alphaPixelDP( int i, int f );
-		__declspec( dllexport ) void setPixelDP( int x, int y, int f );
-		__declspec( dllexport ) void setPixelDP( int i, int f );
-		__declspec( dllexport ) void setFarbe( int f );
-		__declspec( dllexport ) void füllRegion( int x, int y, int b, int h, int fc );
-		__declspec( dllexport ) void alphaRegion( int x, int y, int b, int h, int fc );
-		__declspec( dllexport ) void drawLinieH( int x, int y, int län, int fc ); // zeichnet eine horizontale Linie
-		__declspec( dllexport ) void drawLinieV( int x, int y, int län, int fc ); // zeichnet eine vertikale Linie
-		__declspec( dllexport ) void drawLinieHAlpha( int x, int y, int län, int fc ); // zeichnet eine horizontale Linie
-		__declspec( dllexport ) void drawLinieVAlpha( int x, int y, int län, int fc ); // zeichnet eine vertikale Linie
-		__declspec( dllexport ) void drawLinie( Punkt a, Punkt b, int fc ); // zeichnet eine Linie von Punkt( x1, y1 ) nach Punke( x2, y2 )
-		__declspec( dllexport ) void drawLinieAlpha( Punkt a, Punkt b, int fc );
-        __declspec( dllexport ) void füllKreis( int xOff, int yOff, int r, int fc ); // zeichnet einen Kreis um Punkt( xOff, yOff ) mit radius r
-		__declspec( dllexport ) void drawKreis( int xOff, int yOff, int r, int fc ); // zeichnet einen Kreis um Punkt( xOff, yOff ) mit radius r
-		__declspec( dllexport ) void drawKreisAlpha( int xOff, int yOff, int r, int fc );
-		__declspec( dllexport ) void drawBild( int x, int y, int br, int hö, Bild &zBild ); // zeichet zBild
-		__declspec( dllexport ) void alphaBild( int x, int y, int br, int hö, Bild &zBild );
-		__declspec( dllexport ) void drawBild90( int x, int y, int br, int hö, Bild &zBild ); // Zeichnet ein um 90 Grad nach rchts gedrehtes Bild
-		__declspec( dllexport ) void alphaBild90( int x, int y, int br, int hö, Bild &zBild );
-		__declspec( dllexport ) void drawBild180( int x, int y, int br, int hö, Bild &zBild ); // Zeichnet ein um 180 Grad nach rchts gedrehtes Bild
-		__declspec( dllexport ) void alphaBild180( int x, int y, int br, int hö, Bild &zBild );
-		__declspec( dllexport ) void drawBild270( int x, int y, int br, int hö, Bild &zBild ); // Zeichnet ein um 270 Grad nach rchts gedrehtes Bild
-		__declspec( dllexport ) void alphaBild270( int x, int y, int br, int hö, Bild &zBild );
-		__declspec( dllexport ) void drawBildSkall( int x, int y, int br, int hö, Bild &zBild ); // zeichet zBild Skalliert
-		__declspec( dllexport ) void alphaBildSkall( int x, int y, int br, int hö, Bild &zBild );
-		__declspec( dllexport ) void drawDreieck( Punkt a, Punkt b, Punkt c, int farbe ); // füllt eine Dreieck aus
-		__declspec( dllexport ) void drawDreieckTextur( Punkt a, Punkt b, Punkt c, Punkt ta, Punkt tb, Punkt tc, Bild &textur );
-		__declspec( dllexport ) void drawDreieckAlpha( Punkt a, Punkt b, Punkt c, int farbe );
-		__declspec( dllexport ) void drawDreieckTexturAlpha( Punkt a, Punkt b, Punkt c, Punkt ta, Punkt tb, Punkt tc, Bild &textur );
-		__declspec( dllexport ) bool setDrawOptions( const Punkt &pos, const Punkt &gr ); // setzt die Drawoptionen
-		__declspec( dllexport ) bool setDrawOptions( int x, int y, int br, int hö );
-		__declspec( dllexport ) bool setDrawOptionsErzwingen( const Punkt &pos, const Punkt &gr ); // setzt die Drawoptionen
-		__declspec( dllexport ) bool setDrawOptionsErzwingen( int x, int y, int br, int hö ); // setzt die Drawoptionen
-		__declspec( dllexport ) void addScrollOffset( int xOff, int yOff ); // setzt ScrollOffset
-		__declspec( dllexport ) void releaseDrawOptions(); // setzt die Drawoptionen zurück
-		__declspec( dllexport ) bool getRend();
-		// constant 
-		__declspec( dllexport ) int *getBuffer()const; // gibt buffer zurück
-		__declspec( dllexport ) int getPixel( int x, int y ) const; // gibt die Farbe des Pixels(x, y) zurück
-		__declspec( dllexport ) const Punkt &getGröße() const; // gibt die Größe zurück
-		__declspec( dllexport ) int getBreite() const; // gibt die Breite zurück
-		__declspec( dllexport ) int getHöhe() const; // gibt die Höhe zurück
-		__declspec( dllexport ) unsigned char getAlpha() const; // gibt den Alpha wert zurück
-		__declspec( dllexport ) const Punkt &getDrawPos() const;
-		__declspec( dllexport ) const Punkt &getDrawGr() const;
-		__declspec( dllexport ) const Punkt &getDrawOff() const;
-		// Reference Counting 
-		__declspec( dllexport ) Bild *getThis();
-		__declspec( dllexport ) Bild *release();
-	};
+        // Setzt die mindest Transparenz von allem was als nächstes gezeichnet wird, bis der zugehörige releaseAlpha() aufruf erfolgt.
+        __declspec( dllexport ) void setAlpha( unsigned char alpha );
+        // Entfernt die als letztes mit setAlpha() gesetzte Alpha grenze
+        __declspec( dllexport ) void releaseAlpha();
+        // Setzt einen Zeiger auf die Pixel, in die gezeichnet werden soll
+        //  buffer: Ein Array mit den A8R8G8B8 Farbwerten
+        //  deleteBuffer: 1, fals der Array vom Bild gelöscht werden soll
+        //  breite: Die Breite in Pixeln
+        //  höhe: Die Höhe in Pixeln
+        __declspec( dllexport ) void setPixelBuffer( int *buffer, bool deleteBuffer, int breite, int höhe );
+        // Erstellt ein neues Bild
+        //  breite: Die Breite des Bildes in Pixeln
+        //  höhe: Die Höhe des Bildes in Pixeln
+        //  füllFarbe: Die startfarbe, auf die alle Pixel gesetzt werden
+        __declspec( dllexport ) void neuBild( int breite, int höhe, int füllFarbe );
+        // Blendet mittels Alphablending eine Farbe auf einen bestimmten Pixel
+        // Beachtet nicht die begrenzung der Zeichnenfläche und das Skroll Offset
+        //  x: Die X Koordinate des Pixels
+        //  y: Die Y Koordinate des Pixels
+        //  f: Die Farbe in A8R8G8B8 Format, die geblendet werden soll
+        __declspec( dllexport ) void alphaPixel( int x, int y, int f );
+        // Blendet mittels Alphablending eine Farbe auf einen bestimmten Pixel
+        // Beachtet nicht die begrenzung der Zeichnenfläche und das Skroll Offset
+        //  i: Der Index des Pixels im Pixel Array
+        //  f: Die Farbe in A8R8G8B8 Format, die geblendet werden soll
+        __declspec( dllexport ) void alphaPixel( int i, int f );
+        // Blendet mittels Alphablending eine Farbe auf einen bestimmten Pixel
+        //  x: Die X Koordinate des Pixels
+        //  y: Die Y Koordinate des Pixels
+        //  f: Die Farbe in A8R8G8B8 Format, die geblendet werden soll
+        __declspec( dllexport ) void alphaPixelDP( int x, int y, int f );
+        // Blendet mittels Alphablending eine Farbe auf einen bestimmten Pixel
+        //  i: Der Index des Pixels im Pixel Array
+        //  f: Die Farbe in A8R8G8B8 Format, die geblendet werden soll
+        __declspec( dllexport ) void alphaPixelDP( int i, int f );
+        // Setzt die Farbe eines besimmten Pixels
+        //  x: Die X Koordinate des Pixels
+        //  y: Die Y Koordinate des Pixels
+        //  f: Die neue Farbe in A8R8G8B8 Format
+        __declspec( dllexport ) void setPixelDP( int x, int y, int f );
+        // Setzt die Farbe eines besimmten Pixels
+        //  i: Der Index des Pixels im Pixel Array
+        //  f: Die neue Farbe in A8R8G8B8 Format
+        __declspec( dllexport ) void setPixelDP( int i, int f );
+        // Setzt die Farbe aller Pixel des Bildes
+        //  f: Die neue Farbe
+        __declspec( dllexport ) void setFarbe( int f );
+        // Setzt die Farben aller Pixel in einem Rechteck
+        //  x: Die X Koordinate
+        //  y: Die Y Koordinate
+        //  b: Die Breite des Rechtecks
+        //  h: Die Höhe des Rechtecks
+        //  fc: Die Farbe im A8R8G8B8 Format
+        __declspec( dllexport ) void füllRegion( int x, int y, int b, int h, int fc );
+        // Blendet eine Farbe mit Alphablending in einem Rechteck
+        //  x: Die X Koordinate
+        //  y: Die Y Koordinate
+        //  b: Die Breite des Rechtecks
+        //  h: Die Höhe des Rechtecks
+        //  fc: Die Farbe im A8R8G8B8 Format
+        __declspec( dllexport ) void alphaRegion( int x, int y, int b, int h, int fc );
+        // Zeichnet eine horizontale Linie
+        //  x: Die X Koordinate des Startpunktes der Linie
+        //  y: Die Y Koordinate des Startpunktes der Linie
+        //  län: Die Länge der Linie
+        //  fc: Die Farbe im A8R8G8B8 Format
+        __declspec( dllexport ) void drawLinieH( int x, int y, int län, int fc );
+        // Zeichnet eine vertikale Linie
+        //  x: Die X Koordinate des Startpunktes der Linie
+        //  y: Die Y Koordinate des Startpunktes der Linie
+        //  län: Die Länge der Linie
+        //  fc: Die Farbe im A8R8G8B8 Format
+        __declspec( dllexport ) void drawLinieV( int x, int y, int län, int fc );
+        // Zeichnet eine horizontale Linie mit Alpha blending
+        //  x: Die X Koordinate des Startpunktes der Linie
+        //  y: Die Y Koordinate des Startpunktes der Linie
+        //  län: Die Länge der Linie
+        //  fc: Die Farbe im A8R8G8B8 Format
+        __declspec( dllexport ) void drawLinieHAlpha( int x, int y, int län, int fc );
+        // Zeichnet eine vertikale Linie mit Alpha Blending
+        //  x: Die X Koordinate des Startpunktes der Linie
+        //  y: Die Y Koordinate des Startpunktes der Linie
+        //  län: Die Länge der Linie
+        //  fc: Die Farbe im A8R8G8B8 Format
+        __declspec( dllexport ) void drawLinieVAlpha( int x, int y, int län, int fc );
+        // Zeichnet eine Linie
+        //  a: Der Startpunkt der Linie
+        //  b: der Endpunkt der Linie
+        //  fc: Die Farbe im A8R8G8B8 Format
+        __declspec( dllexport ) void drawLinie( Punkt a, Punkt b, int fc );
+        // Zeichnet eine Linie mit Alpha Blending
+        //  a: Der Startpunkt der Linie
+        //  b: der Endpunkt der Linie
+        //  fc: Die Farbe im A8R8G8B8 Format
+        __declspec( dllexport ) void drawLinieAlpha( Punkt a, Punkt b, int fc );
+        // Füllt einen Kreis mit einer Farbe. (Unfertig)
+        //  xOff: Die X Koordinate des Kreismittelpunktes
+        //  yOff: Die Y Koordinate des Kreismittelpunktes
+        //  r: Der Radius des Kreises in Pixeln
+        //  fc: Die Farbe im A8R8G8B8 Format
+        __declspec( dllexport ) void füllKreis( int xOff, int yOff, int r, int fc );
+        // Zeichnet den Umriss eines Kreises
+        //  xOff: Die X Koordinate des Kreismittelpunktes
+        //  yOff: Die Y Koordinate des Kreismittelpunktes
+        //  r: Der Radius des Kreises in Pixeln
+        //  fc: Die Farbe im A8R8G8B8 Format
+        __declspec( dllexport ) void drawKreis( int xOff, int yOff, int r, int fc );
+        // Zeichnet den Umriss eines Kreises mit Alpha Blending
+        //  xOff: Die X Koordinate des Kreismittelpunktes
+        //  yOff: Die Y Koordinate des Kreismittelpunktes
+        //  r: Der Radius des Kreises in Pixeln
+        //  fc: Die Farbe im A8R8G8B8 Format
+        __declspec( dllexport ) void drawKreisAlpha( int xOff, int yOff, int r, int fc );
+        // Zeichnet ein Bild in ein bestimmtes Feld ohne Skallierung
+        //  x: Die X Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
+        //  y: Die Y Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
+        //  br: Die Breite des Rechecks in dem das Bild gezeichnet werden soll
+        //  hö: Die Höhe des Rechecks in dem das Bild gezeichnet werden soll
+        //  zBild: Das Bild, was gezeichnet werden soll
+        __declspec( dllexport ) void drawBild( int x, int y, int br, int hö, Bild &zBild );
+        // Zeichnet ein Bild in ein bestimmtes Feld ohne Skallierung mit alpha blending
+        //  x: Die X Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
+        //  y: Die Y Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
+        //  br: Die Breite des Rechecks in dem das Bild gezeichnet werden soll
+        //  hö: Die Höhe des Rechecks in dem das Bild gezeichnet werden soll
+        //  zBild: Das Bild, was gezeichnet werden soll
+        __declspec( dllexport ) void alphaBild( int x, int y, int br, int hö, Bild &zBild );
+        // Zeichnet ein Bild um 90 grad nach rechts gedreht in ein bestimmtes Feld ohne Skallierung
+        //  x: Die X Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
+        //  y: Die Y Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
+        //  br: Die Breite des Rechecks in dem das Bild gezeichnet werden soll
+        //  hö: Die Höhe des Rechecks in dem das Bild gezeichnet werden soll
+        //  zBild: Das Bild, was gezeichnet werden soll
+        __declspec( dllexport ) void drawBild90( int x, int y, int br, int hö, Bild &zBild );
+        // Zeichnet ein Bild um 90 grad nach rechts gedreht in ein bestimmtes Feld ohne Skallierung mit alpha Blending
+        //  x: Die X Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
+        //  y: Die Y Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
+        //  br: Die Breite des Rechecks in dem das Bild gezeichnet werden soll
+        //  hö: Die Höhe des Rechecks in dem das Bild gezeichnet werden soll
+        //  zBild: Das Bild, was gezeichnet werden soll
+        __declspec( dllexport ) void alphaBild90( int x, int y, int br, int hö, Bild &zBild );
+        // Zeichnet ein Bild um 180 grad nach rechts gedreht in ein bestimmtes Feld ohne Skallierung
+        //  x: Die X Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
+        //  y: Die Y Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
+        //  br: Die Breite des Rechecks in dem das Bild gezeichnet werden soll
+        //  hö: Die Höhe des Rechecks in dem das Bild gezeichnet werden soll
+        //  zBild: Das Bild, was gezeichnet werden soll
+        __declspec( dllexport ) void drawBild180( int x, int y, int br, int hö, Bild &zBild );
+        // Zeichnet ein Bild um 180 grad nach rechts gedreht in ein bestimmtes Feld ohne Skallierung mit alpha Blending
+        //  x: Die X Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
+        //  y: Die Y Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
+        //  br: Die Breite des Rechecks in dem das Bild gezeichnet werden soll
+        //  hö: Die Höhe des Rechecks in dem das Bild gezeichnet werden soll
+        //  zBild: Das Bild, was gezeichnet werden soll
+        __declspec( dllexport ) void alphaBild180( int x, int y, int br, int hö, Bild &zBild );
+        // Zeichnet ein Bild um 270 grad nach rechts gedreht in ein bestimmtes Feld ohne Skallierung
+        //  x: Die X Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
+        //  y: Die Y Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
+        //  br: Die Breite des Rechecks in dem das Bild gezeichnet werden soll
+        //  hö: Die Höhe des Rechecks in dem das Bild gezeichnet werden soll
+        //  zBild: Das Bild, was gezeichnet werden soll
+        __declspec( dllexport ) void drawBild270( int x, int y, int br, int hö, Bild &zBild );
+        // Zeichnet ein Bild um 270 grad nach rechts gedreht in ein bestimmtes Feld ohne Skallierung mit alpha Blending
+        //  x: Die X Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
+        //  y: Die Y Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
+        //  br: Die Breite des Rechecks in dem das Bild gezeichnet werden soll
+        //  hö: Die Höhe des Rechecks in dem das Bild gezeichnet werden soll
+        //  zBild: Das Bild, was gezeichnet werden soll
+        __declspec( dllexport ) void alphaBild270( int x, int y, int br, int hö, Bild &zBild );
+        // Zeichnet ein Bild in ein bestimmtes Feld mit Skallierung
+        //  x: Die X Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
+        //  y: Die Y Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
+        //  br: Die Breite des Rechecks in dem das Bild gezeichnet werden soll
+        //  hö: Die Höhe des Rechecks in dem das Bild gezeichnet werden soll
+        //  zBild: Das Bild, was gezeichnet werden soll
+        __declspec( dllexport ) void drawBildSkall( int x, int y, int br, int hö, Bild &zBild );
+        // Zeichnet ein Bild in ein bestimmtes Feld mit Skallierung mit Alpha Blending
+        //  x: Die X Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
+        //  y: Die Y Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
+        //  br: Die Breite des Rechecks in dem das Bild gezeichnet werden soll
+        //  hö: Die Höhe des Rechecks in dem das Bild gezeichnet werden soll
+        //  zBild: Das Bild, was gezeichnet werden soll
+        __declspec( dllexport ) void alphaBildSkall( int x, int y, int br, int hö, Bild &zBild );
+        // Füllt ein Dreieck mit einer bestimmten Farbe
+        //  a: Eine Ecke des Dreiecks
+        //  b: Eine Ecke des Dreiecks
+        //  c: Eine Ecke des Dreiecks
+        //  farbe: die Farbe im A8R8G8B8 Format
+        __declspec( dllexport ) void drawDreieck( Punkt a, Punkt b, Punkt c, int farbe );
+        // Füllt ein Dreieck mit einer bestimmten Textur
+        //  a: Eine Ecke des Dreiecks
+        //  b: Eine Ecke des Dreiecks
+        //  c: Eine Ecke des Dreiecks
+        //  ta: Die Koordinaten von a in der Textur
+        //  tb: Die Koordinaten von b in der Textur
+        //  tc: Die Koordinaten von c in der Textur
+        //  textur: Das Bild, was als Textur verwendet werden soll
+        __declspec( dllexport ) void drawDreieckTextur( Punkt a, Punkt b, Punkt c, Punkt ta, Punkt tb, Punkt tc, Bild &textur );
+        // Füllt ein Dreieck mit einer bestimmten Farbe mit alpha blending
+        //  a: Eine Ecke des Dreiecks
+        //  b: Eine Ecke des Dreiecks
+        //  c: Eine Ecke des Dreiecks
+        //  farbe: die Farbe im A8R8G8B8 Format
+        __declspec( dllexport ) void drawDreieckAlpha( Punkt a, Punkt b, Punkt c, int farbe );
+        // Füllt ein Dreieck mit einer bestimmten Textur mit alpha blending
+        //  a: Eine Ecke des Dreiecks
+        //  b: Eine Ecke des Dreiecks
+        //  c: Eine Ecke des Dreiecks
+        //  ta: Die Koordinaten von a in der Textur
+        //  tb: Die Koordinaten von b in der Textur
+        //  tc: Die Koordinaten von c in der Textur
+        //  textur: Das Bild, was als Textur verwendet werden soll
+        __declspec( dllexport ) void drawDreieckTexturAlpha( Punkt a, Punkt b, Punkt c, Punkt ta, Punkt tb, Punkt tc, Bild &textur );
+        // Begrenzt die Zeichenfläche in die bis zum nächsten aufruf von releaseDrawOptions() gezeichnet werden kann. Alles außerhalb der Fläche wird automatisch ignoriert.
+        // Wenn die Zeichenfläche über den Rand einer bestehenden Zeichenfläche hinausragt, wird sie automatisch auf die bestehende Zeichnenfläche beschnitten.
+        //  pos: Die Koordinaten der linken oberen Ecke der Zeichenfläche
+        //  gr: Die Größe der Zeichenfläche
+        //  return: 1, falls die neue Zeichenfläche ganz oder teilweise innerhalb der bestehenden Zeichenfläche ligt. Wenn 0 zurückgegeben wird, wurde die Zeichenfläche nicht gesetzt und es braucht nicht releaseDrawOptions() aufgerufen werden
+        __declspec( dllexport ) bool setDrawOptions( const Punkt &pos, const Punkt &gr );
+        // Begrenzt die Zeichenfläche in die bis zum nächsten aufruf von releaseDrawOptions() gezeichnet werden kann. Alles außerhalb der Fläche wird automatisch ignoriert.
+        // Wenn die Zeichenfläche über den Rand einer bestehenden Zeichenfläche hinausragt, wird sie automatisch auf die bestehende Zeichnenfläche beschnitten.
+        //  x: Die X Koordinate der linken oberen Ecke der Zeichenfläche
+        //  y: Die X Koordinate der linken oberen Ecke der Zeichenfläche
+        //  br: Die Breite der Zeichenfläche
+        //  hö: Die Höhe der Zeichenfläche
+        //  return: 1, falls die neue Zeichenfläche ganz oder teilweise innerhalb der bestehenden Zeichenfläche ligt. Wenn 0 zurückgegeben wird, wurde die Zeichenfläche nicht gesetzt und es braucht nicht releaseDrawOptions() aufgerufen werden
+        __declspec( dllexport ) bool setDrawOptions( int x, int y, int br, int hö );
+        // Begrenzt die Zeichenfläche in die bis zum nächsten aufruf von releaseDrawOptions() gezeichnet werden kann. Alles außerhalb der Fläche wird automatisch ignoriert.
+        // Wenn die Zeichenfläche darf über den Rand einer bestehenden Zeichenfläche hinausragen
+        //  pos: Die Koordinaten der linken oberen Ecke der Zeichenfläche
+        //  gr: Die Größe der Zeichenfläche
+        //  return: 1, falls die neue Zeichenfläche ganz oder teilweise innerhalb des Bildes ligt. Wenn 0 zurückgegeben wird, wurde die Zeichenfläche nicht gesetzt und es braucht nicht releaseDrawOptions() aufgerufen werden
+        __declspec( dllexport ) bool setDrawOptionsErzwingen( const Punkt &pos, const Punkt &gr );
+        // Begrenzt die Zeichenfläche in die bis zum nächsten aufruf von releaseDrawOptions() gezeichnet werden kann. Alles außerhalb der Fläche wird automatisch ignoriert.
+        // Wenn die Zeichenfläche darf über den Rand einer bestehenden Zeichenfläche hinausragen
+        //  x: Die X Koordinate der linken oberen Ecke der Zeichenfläche
+        //  y: Die X Koordinate der linken oberen Ecke der Zeichenfläche
+        //  br: Die Breite der Zeichenfläche
+        //  hö: Die Höhe der Zeichenfläche
+        //  return: 1, falls die neue Zeichenfläche ganz oder teilweise innerhalb des Bildes ligt. Wenn 0 zurückgegeben wird, wurde die Zeichenfläche nicht gesetzt und es braucht nicht releaseDrawOptions() aufgerufen werden
+        __declspec( dllexport ) bool setDrawOptionsErzwingen( int x, int y, int br, int hö );
+        // Setzt Koordinaten, die bei den Zeichenfunktionen von den Positionen abgezogen werden
+        // Vorher sollte eine Zeichenfläche mit SetDrawOptions gesetzt worden sein. Die Werte werden mit dem aufruf von releaseDrawOptions() wieder zurückgesetzt.
+        //  xOff: Ein Wert, der von allen X Koordinaten abgezogen wird
+        //  yOff: Ein Wert, der von allen Y Koordinaten abgezogen wird
+        __declspec( dllexport ) void addScrollOffset( int xOff, int yOff );
+        // Entfernt die als letztes gesetzte begrenzung der Zeichenfläche und alle seit dem gesetzten Scroll Offsets
+        // Stellt die vorherige Zeichenfläche und die zugehörigen Scroll Offsets wieder her
+        __declspec( dllexport ) void releaseDrawOptions();
+        // Gibt zurück, ob sich das Bild seit dem letzten Aufruf dieser Funktion verändert hat
+        __declspec( dllexport ) bool getRend();
+        // Gibt den Array mit A8R8G8B8 Farbwerten der Pixel zurück
+        // Der Index eines Pixels berechnet sich durch x + y * Bildbreite
+        __declspec( dllexport ) int *getBuffer() const;
+        // Gibt den A8R8G8B8 Farbwert eines Pixels zurück
+        //  x: Die X Koordinate des Pixels
+        //  y: Die Y Koordinate des Pixels
+        __declspec( dllexport ) int getPixel( int x, int y ) const;
+        // Gibt die Größe des Bildes zurück
+        __declspec( dllexport ) const Punkt &getGröße() const;
+        // Gibt die Breite des Bildes zurück
+        __declspec( dllexport ) int getBreite() const;
+        // Gibt die Höhe des Bildes zurück
+        __declspec( dllexport ) int getHöhe() const;
+        // Gibt den aktuellen mindest Transparenz Wert zurück
+        __declspec( dllexport ) unsigned char getAlpha() const;
+        // Gibt die Koordinaten der linken oberen Ecke der aktuellen Zeichenfläche zurück
+        __declspec( dllexport ) const Punkt &getDrawPos() const;
+        // Gibt die Größe der aktuelen Zeichenfläche zurück
+        __declspec( dllexport ) const Punkt &getDrawGr() const;
+        // Gibt die Koordinaten zurück, die zu allen Positionen vor dem Zeichnen hinzugefügt werden
+        __declspec( dllexport ) const Punkt &getDrawOff() const;
+        // Erhöht den Reference Counting Zähler.
+        //  return: this.
+        __declspec( dllexport ) Bild *getThis();
+        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
+        //  return: 0.
+        __declspec( dllexport ) Bild *release();
+    };
 #ifdef WIN32
 
-	class BildO : public ZeichnungHintergrund
-	{
+    // Eine Zeichnung des 2d GUI Frameworks, die ein Bild anzeigt.
+    class BildZ : public ZeichnungHintergrund
+    {
     public:
         class Style : public ZeichnungHintergrund::Style
         {
         public:
-            const static __int64 Alpha = 0x1000;
+            const static __int64 Alpha = 0x1000; // Wenn dieser Flag gesetzt ist, wird zum Zeichnen des Bildes Alpha Blending verwendet
 
-            const static __int64 normal = HScroll | Sichtbar | Erlaubt | Rahmen | VScroll;
+            const static __int64 normal = HScroll | Sichtbar | Erlaubt | Rahmen | VScroll; // Der Normale Style einer Bild Zeichnung Bestehend aus HScroll, Sichtbar, Erlaubt, Rahmen, VScroll
         };
-	private:
-		Bild *bild;
-		int ref;
+    private:
+        Bild *bild;
+        int ref;
 
-	public:
-		// Konstruktor 
-		__declspec( dllexport ) BildO();
-		// Destruktor 
-		__declspec( dllexport ) ~BildO();
-		// nicht constant 
-		__declspec( dllexport ) void setBildZ( Bild *b ); // setzt das Bild
-		__declspec( dllexport ) void setBild( Bild *b );
-		__declspec( dllexport ) bool tick( double tickVal ) override; // tick
-		__declspec( dllexport ) void doMausEreignis( MausEreignis &me ) override; // ruft Mak auf
-		__declspec( dllexport ) void render( Bild &zRObj ) override; // zeichnet nach zRObj
-		// constant 
-		__declspec( dllexport ) Bild *getBild() const; // gibt das Bild zurück
-		__declspec( dllexport ) Bild *zBild() const;
-		__declspec( dllexport ) Zeichnung *dublizieren() const override; // erstellt eine Kopie des Zeichnungs
-		// Reference Counting 
-		__declspec( dllexport ) BildO *getThis();
-		__declspec( dllexport ) BildO *release();
-	};
+    public:
+        // Konstruktor 
+        __declspec( dllexport ) BildZ();
+        // Destruktor 
+        __declspec( dllexport ) ~BildZ();
+        // Setzt einen Zeiger auf das Bild, was angezeigt werden soll
+        //  b: Das Bild
+        __declspec( dllexport ) void setBildZ( Bild *b );
+        // Setzt das Bild, was angezeigt werden soll. Der Inhalt des Bildes wird Kopiert
+        //  b: Das Bild
+        __declspec( dllexport ) void setBild( Bild *b );
+        // Updated den Zeichenhintergrund
+        //  tickVal: Die vergangene Zeit in Sekunden, die seit dem Letzten Aufruf dieser Funktion verstrichen ist
+        //  return: 1, wenn das Bild neu gezeichnet werden muss. 0 sonnst
+        __declspec( dllexport ) bool tick( double tickVal ) override;
+        // Verarbeitet ein Maus Ereignis. Wird vom Framework automatisch aufgerufen.
+        //  me: Das Ereignis
+        __declspec( dllexport ) void doMausEreignis( MausEreignis &me ) override;
+        // Zeichnet die Zeihnung in ein bestimmtes Bild
+        //  zRObj: Das Bild, in das gezeichnet werden soll
+        __declspec( dllexport ) void render( Bild &zRObj ) override;
+        // Gibt das angezeigte Bild zurück
+        __declspec( dllexport ) Bild *getBild() const;
+        // Gbt das angezeigte Bild ohne erhöhten Reference Counter zurück
+        __declspec( dllexport ) Bild *zBild() const;
+        // Kopiert die Komplette Zeichnung, so dass sie ohne Effekt auf das Original verändert werden kann
+        __declspec( dllexport ) Zeichnung *dublizieren() const override;
+        // Erhöht den Reference Counting Zähler.
+        //  return: this.
+        __declspec( dllexport ) BildZ *getThis();
+        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
+        //  return: 0.
+        __declspec( dllexport ) BildZ *release();
+    };
 
+    // Lädt ein Bild aus einer .bmp, .jpg, .gif oder .png Datei
+    //  pfad: Der Pfad zur Bilddatei
+    //  zError: Ein Zeiger auf ein Text Objekt, in dem ein möglicher Fehler zurückgegeben wird
+    //  return: Das geladene Bild
     __declspec( dllexport ) Bild *ladeBild( char *pfad, Text *zError );
 #endif
 }

+ 118 - 41
Bildschirm.h

@@ -48,13 +48,14 @@ namespace Framework
     class Textur; // Textur.h
     class TexturModel; // TexturModel.h
 
+    // Eine Struktur, die Informationen über einen Monitor beinhaltet
     struct Monitor
     {
-        int x, y, breite, höhe;
-        bool existiert;
+        int x, y, breite, höhe; // Koordinaten des Monitors und die Auflösung
+        bool existiert; // Speichert, ob der Monitor wirklich existiert
     };
 
-    //Diese Klasse wird das Bild auf dem Bildschirm verwalten
+    // Diese Klasse verwaltet das Bild auf dem Bildschirm
     class Bildschirm
     {
     protected:
@@ -80,45 +81,100 @@ namespace Framework
 
     public:
         // Konstruktor 
+        //  fenster: Das Fenster, dessen Inhalt verwaltet werden soll
         __declspec( dllexport ) Bildschirm( WFenster *fenster );
         // Destruktor 
         __declspec( dllexport ) ~Bildschirm();
-        // nicht constant 
+        // Dies ist notwendig, falls mehrere Threads gleichzeitig den Bildschirm benutzen.
+        // Wenn lock() von zwei threads aufgerufen wird, wartet der letzte so lange, bis der erste unlock() aufgerufen hat.
         __declspec( dllexport ) virtual void lock();
+        // Dies ist notwendig, falls mehrere Threads gleichzeitig den Bildschirm benutzen.
+        // Wenn lock() von zwei threads aufgerufen wird, wartet der letzte so lange, bis der erste unlock() aufgerufen hat.
         __declspec( dllexport ) virtual void unlock();
+        // Legt fest, ob der Bildschirm nach jedem Bild neu mit einer Farbe ausgefüllt wird (Standartmäßig gesetzt)
+        //  f: 1, falls das Bild vor dem Zeichnen zurückgesetzt werden soll
         __declspec( dllexport ) virtual void setFüll( bool f );
-        __declspec( dllexport ) virtual void update() = 0; // aktualisiert directX
-        __declspec( dllexport ) virtual void setTestRend( bool tr ); // legt fest, ob vo rendern auf updates geprüft werden soll
-        __declspec( dllexport ) virtual void setRenderZeichnungen( bool rO ); // legt fest, ob die Zeichnunge gerendert werden
-        __declspec( dllexport ) virtual void setOnTop( bool onTop ); // legt fest, ob das onTop Zeichnung gerendert wid
-        __declspec( dllexport ) virtual void setOnTopZeichnung( Zeichnung *obj ); // setzt das OnTop Zeichnung
-        __declspec( dllexport ) virtual void setdeckFarbe( int f ); // setzt die deckFarbe
-        __declspec( dllexport ) virtual void addMember( Zeichnung *obj ); // Fügt ein Zeichnung hinzu
-        __declspec( dllexport ) virtual void removeMember( Zeichnung *obj ); // Entfernt ein Zeichnung
-        __declspec( dllexport ) virtual void render() = 0; // Zeichnet das Bild
-        __declspec( dllexport ) virtual void setFüllFarbe( int f ); // setzt die Fill Farbe
-        __declspec( dllexport ) virtual void setVollbild( bool fullscreen ); // setzt vollbild
+        // Aktualisiert die Objekte, mit der die Grafikkarte verwaltet wird
+        __declspec( dllexport ) virtual void update() = 0;
+        // Legt fest, ob von dem Zeichnen überprüft wird, ob sich das Bild vom letzten unterscheidet (Standartmäßig gesetzt)
+        //  tr: 1, wenn nur gezeichnet werden soll, wenn es notwendig ist
+        __declspec( dllexport ) virtual void setTestRend( bool tr );
+        // Legt fest, ob die 2D GUI Zeichnungen gezeichnet werden sollen (Standartmäßig gesetzt)
+        //  rO: 1, falls die Zeichnungen gezeichnet werden sollen
+        __declspec( dllexport ) virtual void setRenderZeichnungen( bool rO );
+        // Legt fest, ob eine Zeichnung über allen anderen Zeichnungen gezeichnet werden soll (Standartmäßig nicht gesetzt)
+        //  onTop: 1, falls eine Zeichnung über allem gezeichnet werden soll
+        __declspec( dllexport ) virtual void setOnTop( bool onTop );
+        // Setzt die Zecihnung, die über allem gezeichnet werden soll, falls setOnTop( 1 ) gesetzt wurde
+        //  obj: Die Zeichnung
+        __declspec( dllexport ) virtual void setOnTopZeichnung( Zeichnung *obj );
+        // Setzt eine Farbe, die nach den Zeichnungen mit alphablending über das gesamte Bild geblendet wird, wenn setOnTop( 1 ) gesetzt wurde. Die zeichnung, die mit setOnTopZeichnung() gesetzt wurde ist davon nicht betroffen
+        //  f: Die Farbe im A8R8G8B8 Format
+        __declspec( dllexport ) virtual void setdeckFarbe( int f );
+        // Fügt dem Bild eine Zeichnung hinzu, die immer gezeichnet wird, wenn setRenderZeichnungen( 1 ) gesetzt wurde.
+        //  obj: Die Zeichnung
+        __declspec( dllexport ) virtual void addMember( Zeichnung *obj );
+        // Entfernt eine Zeichnung aus dem Bild. Darf nicht aufgerufen werden, wärend doMausEreignis(), doTastaturEreignis(), tick() oder render() aufgerufen wird.
+        //  obj: Die Zeichnung
+        __declspec( dllexport ) virtual void removeMember( Zeichnung *obj );
+        // Zeichnet ein Bild und präsentiert es auf dem Bildschirm
+        __declspec( dllexport ) virtual void render() = 0;
+        // Setzt die Farbe, mit der das Bild for dem Zeichnen gefüllt wird, wenn setFüll( 1 ) gesetzt wurde
+        //  f: Die Farbe im A8R8G8B8 Format
+        __declspec( dllexport ) virtual void setFüllFarbe( int f );
+        // Legt fest, ob das Bild im Vollbildmodus präsentiert werden soll. (Standartmäßig nicht gesetzt)
+        //  fullscreen: 1, für Vollbildmodus
+        __declspec( dllexport ) virtual void setVollbild( bool fullscreen );
+        // Verarbeitet die Zeit, die seit dem letzten Aufruf der Funktion vergangen ist
+        // Ruft die tick Funktionen aller sich im Bild befindenden Zeichnungen auf
+        //  tickval: Die vergangene Zeit in Sekunden
         __declspec( dllexport ) virtual void tick( double tickval );
-        __declspec( dllexport ) virtual void setBackBufferGröße( int breite, int höhe ); // setzt die Größe des Backbuffers
+        // Setzt die Auflösung des Bildes, das angezeigt wird. Es wird von der Grafikkarte automatisch skalliert, so das es das Fenster ausfüllt
+        //  breite: Die Breite des Bildes in Pixeln
+        //  höhe: Die Höhe des Bildes in Pixeln
+        __declspec( dllexport ) virtual void setBackBufferGröße( int breite, int höhe );
+        // Setzt die Auflösung des Bildes, das angezeigt wird. Es wird von der Grafikkarte automatisch skalliert, so das es das Fenster ausfüllt
+        //  größe: Die Breite und Höhe in Pixeln
         __declspec( dllexport ) virtual void setBackBufferGröße( Punkt &größe );
-        __declspec( dllexport ) virtual void doMausEreignis( MausEreignis &me ); // sendet maus Ereignis
-        __declspec( dllexport ) virtual void doTastaturEreignis( TastaturEreignis &te ); // sendet tastatur Ereignis
-        __declspec( dllexport ) virtual void addToolTip( ToolTip *tip ); // fügt ToolTip hinzu
-        __declspec( dllexport ) virtual bool removeToolTip( ToolTip *zTip ); // entfernt ToolTip
-        // constant 
-        __declspec( dllexport ) virtual Bild *getRenderBild() const; // Gibt das RendezRObj zurück
+        // Verarbeitet ein Maus Ereignis. Wird vom Framework automatisch aufgerufen.
+        // Gibt das Ereignis automatisch an alle sich im Bild befindenden Zeichnungen weiter
+        //  me: Das Ereignis
+        __declspec( dllexport ) virtual void doMausEreignis( MausEreignis &me );
+        // Verarbeitet ein Tastatur Ereignis. Wird vom Framework automatisch aufgerufen
+        // Gibt das Ereignis automatisch an alle sich im Bild befindenden Zeichnungen weiter
+        //  te: Das Ereignis
+        __declspec( dllexport ) virtual void doTastaturEreignis( TastaturEreignis &te );
+        // Fügt einen Tooltip hinzu.
+        //  tip: Der Tooltip
+        __declspec( dllexport ) virtual void addToolTip( ToolTip *tip );
+        // Entfernt einen Tooltip
+        //  zTip: Der Tooltip ohne erhöhten reference Counter
+        __declspec( dllexport ) virtual bool removeToolTip( ToolTip *zTip );
+        // Gibt das Bild zurück, in das die 2D GUI Zeichnungen des Frameworks gezeichnet werden
+        __declspec( dllexport ) virtual Bild *getRenderBild() const;
+        // Gibt das Bild ohne erhöhten Reference Counter zurück, in das die 2D GUI Zeichnungen des Frameworks gezeichnet werden
         __declspec( dllexport ) virtual Bild *zRenderBild() const;
-        __declspec( dllexport ) virtual ZeichnungArray *getMembers() const; // gibt die Zeichnunge zurück
-        __declspec( dllexport ) virtual int getFüllFarbe() const; // gibt die Füll Farbe zurück
-        __declspec( dllexport ) virtual bool istVolbild() const; // gibt zurück, ob vollbild an ist
-        __declspec( dllexport ) virtual const Punkt &getBackBufferGröße() const; // gibt die Größe des Backbuffers zurück
-        __declspec( dllexport ) virtual void warteAufRendern() const; // wartet auf die render Funktion
-        __declspec( dllexport ) virtual double getRenderZeit() const; // gibt zurück wie viele Sekunden das Rendern dauert
-        // Reference Counting 
+        // Gibt ein Array von 2D GUI Zeichnungen zurück, die sich im Bild befinden
+        __declspec( dllexport ) virtual ZeichnungArray *getMembers() const;
+        // Gibt die Farbe im A8R8G8B8 Format zurück, mit der das Bild vor dem Zeichnen befüllt wird
+        __declspec( dllexport ) virtual int getFüllFarbe() const;
+        // Gibt zurück, ob man sich im Vollbildmodus befindet
+        __declspec( dllexport ) virtual bool istVolbild() const;
+        // Gibt die Auflösung in Pixeln zurück, in der gezeichnet wird
+        __declspec( dllexport ) virtual const Punkt &getBackBufferGröße() const;
+        // Wartet, bis das Zeichnen des aktuellen Bildes abgeschlossen ist
+        __declspec( dllexport ) virtual void warteAufRendern() const;
+        // Gibt die Zeit in Sekunden zurück, die benötigt wurde, um das letzte Bild zu zeichnen
+        __declspec( dllexport ) virtual double getRenderZeit() const;
+        // Erhöht den Reference Counter um 1
+        //  Return: Ein zeiger auf diesen Shader
         __declspec( dllexport ) virtual Bildschirm *getThis();
+        // Verringert den Reference Counter und löscht den Shader, falls der Refeence Counter auf 0 ist
+        //  Return: 0
         __declspec( dllexport ) virtual Bildschirm *release();
     };
 
+    // Diese Klasse verwaltet das Bild auf dem Bildschirm ohne 3D Elemente
     class Bildschirm2D : public Bildschirm
     {
     private:
@@ -131,16 +187,20 @@ namespace Framework
 
     public:
         // Konstruktor 
+        //  fenster: Das Fenster, dessen Inhalt verwaltet werden soll
         __declspec( dllexport ) Bildschirm2D( WFenster *fenster );
         // Destruktor 
         __declspec( dllexport ) ~Bildschirm2D();
-        // nicht constant 
-        __declspec( dllexport ) virtual void update(); // aktualisiert directX
-        __declspec( dllexport ) virtual void render(); // Zeichnet das Bild
-        // Reference Counting 
+        // Aktualisiert die Objekte, mit der die Grafikkarte verwaltet wird
+        __declspec( dllexport ) virtual void update();
+        // Zeichnet ein Bild und präsentiert es auf dem Bildschirm
+        __declspec( dllexport ) virtual void render();
+        // Verringert den Reference Counter und löscht den Shader, falls der Refeence Counter auf 0 ist
+        //  Return: 0
         __declspec( dllexport ) virtual Bildschirm *release();
     };
 
+    // Diese Klasse verwaltet das Bild auf dem Bildschirm mit 3D Elementen
     class Bildschirm3D : public Bildschirm
     {
     private:
@@ -167,21 +227,38 @@ namespace Framework
 
     public:
         // Konstruktor 
+        //  fenster: Das Fenster, dessen Inhalt verwaltet werden soll
         __declspec( dllexport ) Bildschirm3D( WFenster *fenster );
         // Destruktor 
         __declspec( dllexport ) ~Bildschirm3D();
-        // nicht constant 
-        __declspec( dllexport ) void addKamera( Kam3D *obj ); // Fügt eine Kamera hinzu
-        __declspec( dllexport ) void removeKamera( Kam3D *zObj ); // Entfernt eine Kamera
+        // Fügt dem Bildschirm eine Kamera hinzu
+        //  obj: Die Kamera
+        __declspec( dllexport ) void addKamera( Kam3D *obj );
+        // Entfernt eine kamera von dem Bildschirm
+        __declspec( dllexport ) void removeKamera( Kam3D *zObj );
+        // Verarbeitet die Zeit, die seit dem letzten Aufruf der Funktion vergangen ist
+        // Ruft die tick Funktionen aller sich im Bild befindenden Zeichnungen und der Kameras auf
+        //  tickval: Die vergangene Zeit in Sekunden
         __declspec( dllexport ) void tick( double tickval );
-        __declspec( dllexport ) void doMausEreignis( MausEreignis &me ); // sendet maus Ereignis
-        __declspec( dllexport ) void doTastaturEreignis( TastaturEreignis &te ); // sendet tastatur Ereignis
-        __declspec( dllexport ) void update(); // aktualisiert directX
-        __declspec( dllexport ) void render(); // Zeichnet das Bild
-        // Reference Counting  
+        // Verarbeitet ein Maus Ereignis. Wird vom Framework automatisch aufgerufen.
+        // Gibt das Ereignis automatisch an alle sich im Bild befindenden Zeichnungen und Kameras weiter
+        //  me: Das Ereignis
+        __declspec( dllexport ) void doMausEreignis( MausEreignis &me );
+        // Verarbeitet ein Tastatur Ereignis. Wird vom Framework automatisch aufgerufen
+        // Gibt das Ereignis automatisch an alle sich im Bild befindenden Zeichnungen und Kameras weiter
+        //  te: Das Ereignis
+        __declspec( dllexport ) void doTastaturEreignis( TastaturEreignis &te );
+        // Aktualisiert die Objekte, mit der die Grafikkarte verwaltet wird
+        __declspec( dllexport ) void update();
+        // Zeichnet ein Bild und präsentiert es auf dem Bildschirm
+        __declspec( dllexport ) void render();
+        // Verringert den Reference Counter und löscht den Shader, falls der Refeence Counter auf 0 ist
+        //  Return: 0
         __declspec( dllexport ) Bildschirm *release();
     };
 
+    // Findet die Psition und Auflösung eines Monitors heraus
+    //  id: Die ID des Monitors. Falls der Monitor nicht gefunden wurde ist der existiert flag der zurückgegebenen Monitor Struktur 0
     __declspec( dllexport ) Monitor getMonitor( int id );
 }
 

+ 3 - 0
DXBuffer.h

@@ -9,6 +9,7 @@ namespace Framework
 {
     class Render3D;
 
+    // Eine Schnittstelle zwischen dem Arbeitsspeicher und dem Grafikspeicher
     class DXBuffer
     {
     private:
@@ -55,6 +56,7 @@ namespace Framework
         __declspec( dllexport ) virtual DXBuffer *release();
     };
 
+    // Ein Buffer von Eckpunkten eines 3D Models
     class DXVertexBuffer : public DXBuffer
     {
     public:
@@ -66,6 +68,7 @@ namespace Framework
         __declspec( dllexport ) virtual DXBuffer *release();
     };
 
+    // Ein Buffer von Indizes aus dem Buffer mit Eckpunkten, wovon immer drei ein Dreieck ergeben, das gezeichnet wird
     class DXIndexBuffer : public DXBuffer
     {
     public:

+ 1 - 1
Diagramm.cpp

@@ -1849,7 +1849,7 @@ void LDiag::render( Bild &zRObj )
                 int rpx = horizontalScrollBar && hatStyle( Style::HScroll ) ? -horizontalScrollBar->getScroll() : 0;
                 int rpy = vertikalScrollBar && hatStyle( Style::VScroll ) ? -vertikalScrollBar->getScroll() : 0;
                 rpy += dgy;
-                int dgmhö = vertikalScrollBar && hatStyle( Style::VScroll ) ? dgy + vertikalScrollBar->getScrollData()->maxHöhe + dgrbr : dgy + dghö - dgrbr;
+                int dgmhö = vertikalScrollBar && hatStyle( Style::VScroll ) ? dgy + vertikalScrollBar->getScrollData()->max + dgrbr : dgy + dghö - dgrbr;
                 if( hatWertStyle( i, DiagWert::Style::Hintergrund ) )
                 {
                     DiagPunkt *vorher = 0;

+ 16 - 3
DreieckListe.h

@@ -7,11 +7,14 @@
 namespace Framework
 {
 	template< typename T >
+    // Eine Ecke eines Dreiecks
 	struct DreieckPunkt
 	{
 		T *punkt;
 		Punkt *textur;
         // Konstruktor
+        //  punkt: Die Koordinate der Ecke
+        //  textur: Die Koordinate in der Textur
         DreieckPunkt( T *punkt, Punkt *textur )
         {
             this->punkt = punkt;
@@ -26,6 +29,7 @@ namespace Framework
 	};
 
 	template< typename T >
+    // Eine Liste von Dreiecken, wobei immer die Beiden letzten Punkte des vorheriegen Dreiecks mit dem nächsten Punkt ein neues Dreieck bilden
 	class DreieckListe
 	{
 	private:
@@ -49,12 +53,15 @@ namespace Framework
 			punkte->release();
 		}
 
-		// nicht constant
+		// Fügt der Liste einen Punkt hinzu
+        //  p: Die Koordinaten des Punktes
+        //  textur: Die Koordinaten in der Textur
 		void addPunkt( T *p, Punkt *textur )
 		{
 			punkte->add( new DreieckPunkt< T >( p, textur ) );
 		}
 
+        // Löscht den letzten Punkt
 		void löscheLetztenPunkt()
 		{
 			int i = punkte->getEintragAnzahl() - 1;
@@ -64,6 +71,7 @@ namespace Framework
 			punkte->lösche( i );
 		}
 
+        // Löscht alle Ecken
 		void lehren()
 		{
 			int anz = punkte->getEintragAnzahl();
@@ -72,12 +80,13 @@ namespace Framework
 			punkte->leeren();
 		}
 
-		// constant
+		// gibt die Anzahl der Dreiecke zurück
 		int getDreieckAnzahl() const
 		{
 			return punkte->getEintragAnzahl() - 2;
 		}
 
+        // Gibt zurück, ob eine Textur verwendet wird
 		bool hatTextur() const
 		{
 			int anz = punkte->getEintragAnzahl();
@@ -90,18 +99,22 @@ namespace Framework
 			return ret;
 		}
 
+        // Gibt die Liste mit Punkten zurück
 		Array< DreieckPunkt< T >* > *zListe() const
 		{
 			return punkte;
 		}
 
-		// Reference Counting
+        // Erhöht den Reference Counting Zähler.
+        //  return: this.
 		DreieckListe *getThis()
 		{
 			ref++;
 			return this;
 		}
 
+        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
+        //  return: 0.
 		DreieckListe *release()
 		{
 			ref--;

+ 163 - 0
Ebene3D.h

@@ -0,0 +1,163 @@
+#pragma once
+
+#include "Vec3.h"
+
+namespace Framework
+{
+    template< typename T >
+    // Speichert eine 3D Ebene in Koordinaten Form (x*?+y*?+z*?-w=0)
+    class Ebene3D
+    {
+    public:
+        T x; // Die X Komponente des Normalen Vektors der Ebene
+        T y; // Die Y Komponente des Normalen Vektors der Ebene
+        T z; // Die Z Komponente des Normalen Vektors der Ebene
+        T w; // Der Wert, den das Skalarprodukt eines Vektors mit dem Normalen Vektor haben muss um in der Ebene zu liegen
+        // Konstruktor
+        inline Ebene3D()
+        {}
+        // Knstruktor
+        //  x: Die X Komponente des Normalen Vektors der Ebene
+        //  y: Die Y Komponente des Normalen Vektors der Ebene
+        //  z: Die Z Komponente des Normalen Vektors der Ebene
+        //  w: Der Wert, den das Skalarprodukt eines Vektors mit dem Normalen Vektor haben muss um in der Ebene zu liegen
+        inline Ebene3D( T x, T y, T z, T w )
+            : x( x ),
+            y( y ),
+            z( z ),
+            w( w )
+        {}
+        // Knstruktor
+        //  vect: Die Ebene, deren Werte kopiert werden sollen
+        inline Ebene3D( const Ebene3D &vect )
+            : Ebene3D( vect.x, vect.y, vect.z, vect.w )
+        {}
+        // Bringt den Normalen Vektor der Ebene auf die Länge 1
+        inline Ebene3D &normalize()
+        {
+            const T länge = län();
+            x /= länge;
+            y /= länge;
+            z /= länge;
+            w /= länge;
+            return *this;
+        }
+        // Tauscht die Werte zweier Ebenen
+        //  vect: die zweite Ebene
+        inline Ebene3D &Swap( Ebene3D &vect )
+        {
+            const Ebene3D tmp = vect;
+            vect = *this;
+            *this = tmp;
+            return *this;
+        }
+        // Kopiert die Werte einer anderen Ebene
+        //  r: Die andere Ebene
+        inline Ebene3D operator=( const Ebene3D &r )
+        {
+            x = r.x;
+            y = r.y;
+            z = r.z;
+            w = r.w;
+            return *this;
+        }
+        // Addiert eine andere Ebene dazu
+        //  r: Die andere Ebene
+        inline Ebene3D operator+=( const Ebene3D &r )
+        {
+            x += r.x;
+            y += r.y;
+            z += r.z;
+            w += r.w;
+            return *this;
+        }
+        // Subtrahiert eine andere Ebene
+        //  r: Die andere Ebene
+        inline Ebene3D operator-=( const Ebene3D &r )
+        {
+            x -= r.x;
+            y -= r.y;
+            z -= r.z;
+            w -= r.w;
+            return *this;
+        }
+        // Multipliziert die Ebene mit einem Faktor
+        //  r: Der Faktor
+        inline Ebene3D operator*=( const T &r )
+        {
+            x *= r;
+            y *= r;
+            z *= r;
+            w *= r;
+            return *this;
+        }
+        // Teilt die Ebene durch einen Faktor
+        //  r: Der Faktor
+        inline Ebene3D operator/=( const T &r )
+        {
+            x /= r;
+            y /= r;
+            z /= r;
+            w /= r;
+            return *this;
+        }
+        template< typename T2 >
+        // Konvertiert die Ebene in einen anderen Typ
+        inline operator Ebene3D< T2 >() const
+        {
+            return{ (T2)x, (T2)y, (T2)z, (T2)w };
+        }
+        // Errehnet das Quadrat der Länge des Normalen Vektors der Ebene
+        inline T länSq() const
+        {
+            return x * x + y * y + z * z;
+        }
+        // Errechnet die Länge des Normalen Vektors
+        inline T län() const
+        {
+            return sqrt( länSq() );
+        }
+        // Berechnet die Entfernung der Ebene zu einem Vektor
+        //  r: Der Vektor
+        inline T operator*( const Vec3< T > &r ) const
+        {
+            return x * r.x + y * r.y + z * r.z + w;
+        }
+        // Addiert zwei Ebenen
+        //  r: Die andere Ebene
+        inline Ebene3D operator+( const Ebene3D &r ) const
+        {
+            return Vec4( *this ) += r;
+        }
+        // Subtrahiert zwei Ebenen
+        //  r: Die andere Ebene
+        inline Ebene3D operator-( const Ebene3D &r ) const
+        {
+            return Ebene3D( *this ) -= r;
+        }
+        // Multiliziert die Ebene mit einem Faktor
+        // r: Der Faktor
+        inline Ebene3D operator*( const T &r ) const
+        {
+            return Ebene3D( *this ) *= r;
+        }
+        // Dividiert die Ebene durch einen Faktor
+        //  r: Der Faktor
+        inline Ebene3D operator/( const T &r ) const
+        {
+            return Ebene3D( *this ) /= r;
+        }
+        // Überprüft zwei Ebenen auf Gleichheit
+        //  r: Die andere Ebene
+        inline bool operator==( const Ebene3D &r ) const
+        {
+            return x == r.x && y == r.y && z == r.z && w == r.w;
+        }
+        // Überprüft zwei Ebenen auf Ungleichheit
+        //  r: Die andere Ebene
+        inline bool operator!=( const Ebene3D &r ) const
+        {
+            return !( *this == r );
+        }
+    };
+}

+ 16 - 22
Fenster.cpp

@@ -1710,7 +1710,7 @@ void Fenster::doMausEreignis( MausEreignis &me )
 								gr.y = fMaxHö;
 							}
 							else if( vSc )
-								vScroll->getScrollData()->anzeigeHöhe = gr.y;
+								vScroll->getScrollData()->anzeige = gr.y;
 							rend = 1;
 							ret1 = 1;
 						}
@@ -1725,7 +1725,7 @@ void Fenster::doMausEreignis( MausEreignis &me )
 							{
 								mset = 1;
 								if( vSc )
-									vScroll->getScrollData()->anzeigeHöhe = gr.y;
+									vScroll->getScrollData()->anzeige = gr.y;
 							}
 							rend = 1;
 							ret1 = 1;
@@ -1748,7 +1748,7 @@ void Fenster::doMausEreignis( MausEreignis &me )
 								gr.x = fMaxBr;
 							}
 							else if( hSc )
-								hScroll->getScrollData()->anzeigeBreite = gr.x;
+								hScroll->getScrollData()->anzeige = gr.x;
 							rend = 1;
 							ret1 = 1;
 						}
@@ -1763,7 +1763,7 @@ void Fenster::doMausEreignis( MausEreignis &me )
 							{
 								mset = 1;
 								if( hSc )
-									hScroll->getScrollData()->anzeigeBreite = gr.x;
+									hScroll->getScrollData()->anzeige = gr.x;
 							}
 							rend = 1;
 							ret1 = 1;
@@ -1865,16 +1865,16 @@ void Fenster::doMausEreignis( MausEreignis &me )
 				me.mx -= rbr;
 				me.my -= rbr + th;
 				if( hatStyle( Style::VScroll ) && vScroll )
-					me.my += vScroll->getScrollData()->anzeigeBeginn;
+					me.my += vScroll->getScroll();
 				if( hatStyle( Style::HScroll ) && hScroll )
-					me.mx += hScroll->getScrollData()->anzeigeBeginn;
+					me.mx += hScroll->getScroll();
 				members->sendMausAll( me );
 				me.mx += rbr;
 				me.my += rbr + th;
-				if( hatStyle( Style::VScroll ) && vScroll )
-					me.my -= vScroll->getScrollData()->anzeigeBeginn;
+                if( hatStyle( Style::VScroll ) && vScroll )
+                    me.my -= vScroll->getScroll();
 				if( hatStyle( Style::HScroll ) && hScroll )
-					me.mx -= hScroll->getScrollData()->anzeigeBeginn;
+					me.mx -= hScroll->getScroll();
 			}
 			if( inside && hatStyleNicht( Style::METransparenz ) )
 				me.verarbeitet = 1;
@@ -2045,13 +2045,7 @@ void Fenster::render( Bild &zRObj ) // zeichent nach zRObj
 				members->render( zRObj );
 			else
 			{
-				VScrollData *vsd = 0;
-				HScrollData *hsd = 0;
-				if( vSc )
-					vsd = vScroll->getScrollData();
-				if( hSc )
-					hsd = hScroll->getScrollData();
-				zRObj.addScrollOffset( hsd ? hsd->anzeigeBeginn : 0, vsd ? vsd->anzeigeBeginn : 0 );
+				zRObj.addScrollOffset( hSc ? hScroll->getScroll() : 0, vSc ? vScroll->getScroll() : 0 );
 				members->render( zRObj );
 			}
 		}
@@ -2371,7 +2365,7 @@ VScrollBar *Fenster::getVScrollBar() const // gibt die Vertikale Scroll Bar zur
 {
 	if( !vScroll )
 		return 0;
-	return vScroll->getThis();
+	return (VScrollBar*)vScroll->getThis();
 }
 
 VScrollBar *Fenster::zVScrollBar() const
@@ -2383,7 +2377,7 @@ HScrollBar *Fenster::getHScrollBar() const // gibt die Horizontale Scroll Bar zu
 {
 	if( !hScroll )
 		return 0;
-	return hScroll->getThis();
+	return (HScrollBar*)hScroll->getThis();
 }
 
 HScrollBar *Fenster::zHScrollBar() const
@@ -2442,13 +2436,13 @@ Zeichnung *Fenster::dublizieren() const // Erzeugt eine Kopie des Fensters
 	}
 	if( vScroll )
 	{
-		ret->setVSBMax( vScroll->getScrollData()->maxHöhe );
-		ret->setVSBScroll( vScroll->getScrollData()->anzeigeBeginn );
+		ret->setVSBMax( vScroll->getScrollData()->max );
+		ret->setVSBScroll( vScroll->getScroll() );
 	}
 	if( hScroll )
 	{
-		ret->setHSBMax( hScroll->getScrollData()->maxBreite );
-		ret->setHSBScroll( hScroll->getScrollData()->anzeigeBeginn );
+		ret->setHSBMax( hScroll->getScrollData()->max );
+		ret->setHSBScroll( hScroll->getScroll() );
 	}
 	ret->setMin( min );
 	ret->setMax( max );

+ 1 - 18
Framework.vcxproj

@@ -230,7 +230,6 @@ copy "x64\Release\Framework.dll" "..\..\Spiele Platform\SMP\Fertig\x64\framework
     <ClInclude Include="FrameworkMath.h" />
     <ClInclude Include="Globals.h" />
     <ClInclude Include="InitDatei.h" />
-    <ClInclude Include="Kam2D.h" />
     <ClInclude Include="Kam3D.h" />
     <ClInclude Include="Knopf.h" />
     <ClInclude Include="KSGTDatei.h" />
@@ -252,7 +251,7 @@ copy "x64\Release\Framework.dll" "..\..\Spiele Platform\SMP\Fertig\x64\framework
     <ClInclude Include="Textur.h" />
     <ClInclude Include="TexturList.h" />
     <ClInclude Include="TexturModel.h" />
-    <ClInclude Include="Vec4.h" />
+    <ClInclude Include="Ebene3D.h" />
     <ClInclude Include="Welt3D.h" />
     <ClInclude Include="Zeichnung.h" />
     <ClInclude Include="Prozess.h" />
@@ -271,7 +270,6 @@ copy "x64\Release\Framework.dll" "..\..\Spiele Platform\SMP\Fertig\x64\framework
     <ClInclude Include="Betriebssystem.h" />
     <ClInclude Include="Vec2.h" />
     <ClInclude Include="Vec3.h" />
-    <ClInclude Include="Welt2D.h" />
     <ClInclude Include="Zeichnung3D.h" />
     <ClInclude Include="Zeit.h" />
   </ItemGroup>
@@ -291,7 +289,6 @@ copy "x64\Release\Framework.dll" "..\..\Spiele Platform\SMP\Fertig\x64\framework
     <ClCompile Include="Fortschritt.cpp" />
     <ClCompile Include="Global.cpp" />
     <ClCompile Include="InitDatei.cpp" />
-    <ClCompile Include="Kam2D.cpp" />
     <ClCompile Include="Kam3D.cpp" />
     <ClCompile Include="Knopf.cpp" />
     <ClCompile Include="KSGTDatei.cpp" />
@@ -325,7 +322,6 @@ copy "x64\Release\Framework.dll" "..\..\Spiele Platform\SMP\Fertig\x64\framework
     <ClCompile Include="TextFeld.cpp" />
     <ClCompile Include="Thread.cpp" />
     <ClCompile Include="ToolTip.cpp" />
-    <ClCompile Include="Welt2D.cpp" />
     <ClCompile Include="Zeit.cpp" />
   </ItemGroup>
   <ItemGroup>
@@ -335,19 +331,6 @@ copy "x64\Release\Framework.dll" "..\..\Spiele Platform\SMP\Fertig\x64\framework
     <Reference Include="System.Windows.Forms" />
     <Reference Include="System.Xml" />
   </ItemGroup>
-  <ItemGroup>
-    <None Include="TestShader.hlsl">
-      <ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Compute</ShaderType>
-      <ShaderModel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4.0</ShaderModel>
-      <ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compute</ShaderType>
-      <ShaderModel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4.0</ShaderModel>
-      <ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Compute</ShaderType>
-      <ShaderModel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4.0</ShaderModel>
-      <ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compute</ShaderType>
-      <ShaderModel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4.0</ShaderModel>
-      <FileType>Document</FileType>
-    </None>
-  </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>

+ 46 - 63
Framework.vcxproj.filters

@@ -16,9 +16,6 @@
     <Filter Include="Headerdateien\Framework">
       <UniqueIdentifier>{ebc032cb-0fe8-4712-8cba-6f8cf72c9e6e}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Headerdateien\Framework\Objekte">
-      <UniqueIdentifier>{c85aabf4-2e43-4a74-90bc-2d92b7bf3259}</UniqueIdentifier>
-    </Filter>
     <Filter Include="Headerdateien\Framework\OS">
       <UniqueIdentifier>{446e41c7-ea7d-4519-9cd1-1238232b08f8}</UniqueIdentifier>
     </Filter>
@@ -40,9 +37,6 @@
     <Filter Include="Quelldateien\Framework\OS">
       <UniqueIdentifier>{d5fa078e-3896-4292-a26d-67a78fed965a}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Quelldateien\Framework\Objekte">
-      <UniqueIdentifier>{446facfc-5180-4e05-a2ff-c5c0287705d2}</UniqueIdentifier>
-    </Filter>
     <Filter Include="Quelldateien\Framework\Grafik">
       <UniqueIdentifier>{8af2e4df-a840-42d3-a393-5d6b4bf7d569}</UniqueIdentifier>
     </Filter>
@@ -70,6 +64,12 @@
     <Filter Include="Quelldateien\Framework\Grafik\3D">
       <UniqueIdentifier>{6b73527a-d839-4081-a7b5-7e1d79b67cbd}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Headerdateien\Framework\Objekte2D">
+      <UniqueIdentifier>{c85aabf4-2e43-4a74-90bc-2d92b7bf3259}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Quelldateien\Framework\Objekte2D">
+      <UniqueIdentifier>{446facfc-5180-4e05-a2ff-c5c0287705d2}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="Model2D.h">
@@ -84,41 +84,38 @@
     <ClInclude Include="Mat3.h">
       <Filter>Headerdateien\Framework\Grafik\3D</Filter>
     </ClInclude>
-    <ClInclude Include="Animation.h">
-      <Filter>Headerdateien\Framework\Grafik\2D</Filter>
-    </ClInclude>
     <ClInclude Include="AlphaFeld.h">
-      <Filter>Headerdateien\Framework\Objekte</Filter>
+      <Filter>Headerdateien\Framework\Objekte2D</Filter>
     </ClInclude>
     <ClInclude Include="Knopf.h">
-      <Filter>Headerdateien\Framework\Objekte</Filter>
+      <Filter>Headerdateien\Framework\Objekte2D</Filter>
     </ClInclude>
     <ClInclude Include="Fenster.h">
-      <Filter>Headerdateien\Framework\Objekte</Filter>
+      <Filter>Headerdateien\Framework\Objekte2D</Filter>
     </ClInclude>
     <ClInclude Include="Fortschritt.h">
-      <Filter>Headerdateien\Framework\Objekte</Filter>
+      <Filter>Headerdateien\Framework\Objekte2D</Filter>
     </ClInclude>
     <ClInclude Include="Liste.h">
-      <Filter>Headerdateien\Framework\Objekte</Filter>
+      <Filter>Headerdateien\Framework\Objekte2D</Filter>
     </ClInclude>
     <ClInclude Include="Diagramm.h">
-      <Filter>Headerdateien\Framework\Objekte</Filter>
+      <Filter>Headerdateien\Framework\Objekte2D</Filter>
     </ClInclude>
     <ClInclude Include="Rahmen.h">
-      <Filter>Headerdateien\Framework\Objekte</Filter>
+      <Filter>Headerdateien\Framework\Objekte2D</Filter>
     </ClInclude>
     <ClInclude Include="Tabelle.h">
-      <Filter>Headerdateien\Framework\Objekte</Filter>
+      <Filter>Headerdateien\Framework\Objekte2D</Filter>
     </ClInclude>
     <ClInclude Include="TextFeld.h">
-      <Filter>Headerdateien\Framework\Objekte</Filter>
+      <Filter>Headerdateien\Framework\Objekte2D</Filter>
     </ClInclude>
     <ClInclude Include="ToolTip.h">
-      <Filter>Headerdateien\Framework\Objekte</Filter>
+      <Filter>Headerdateien\Framework\Objekte2D</Filter>
     </ClInclude>
     <ClInclude Include="Scroll.h">
-      <Filter>Headerdateien\Framework\Objekte</Filter>
+      <Filter>Headerdateien\Framework\Objekte2D</Filter>
     </ClInclude>
     <ClInclude Include="Bildschirm.h">
       <Filter>Headerdateien\Framework\Grafik\DX</Filter>
@@ -127,7 +124,7 @@
       <Filter>Headerdateien\Framework\OS</Filter>
     </ClInclude>
     <ClInclude Include="AuswahlBox.h">
-      <Filter>Headerdateien\Framework\Objekte</Filter>
+      <Filter>Headerdateien\Framework\Objekte2D</Filter>
     </ClInclude>
     <ClInclude Include="Prozess.h">
       <Filter>Headerdateien\Framework\OS</Filter>
@@ -195,20 +192,14 @@
     <ClInclude Include="DateiDialog.h">
       <Filter>Headerdateien\Framework\OS\Datei</Filter>
     </ClInclude>
-    <ClInclude Include="Welt2D.h">
-      <Filter>Headerdateien\Framework\Grafik\2D</Filter>
-    </ClInclude>
-    <ClInclude Include="Kam2D.h">
-      <Filter>Headerdateien\Framework\Grafik\2D</Filter>
-    </ClInclude>
     <ClInclude Include="M2DVorschau.h">
-      <Filter>Headerdateien\Framework\Objekte</Filter>
+      <Filter>Headerdateien\Framework\Objekte2D</Filter>
     </ClInclude>
     <ClInclude Include="ObjectRegister.h">
       <Filter>Headerdateien\Framework</Filter>
     </ClInclude>
     <ClInclude Include="Zeichnung.h">
-      <Filter>Headerdateien\Framework\Objekte</Filter>
+      <Filter>Headerdateien\Framework\Objekte2D</Filter>
     </ClInclude>
     <ClInclude Include="DefaultShader.h">
       <Filter>Headerdateien\Framework\Grafik\DX</Filter>
@@ -249,21 +240,24 @@
     <ClInclude Include="Model3DList.h">
       <Filter>Headerdateien\Framework\Grafik\3D</Filter>
     </ClInclude>
-    <ClInclude Include="Vec4.h">
-      <Filter>Headerdateien\Framework\Grafik\4D</Filter>
-    </ClInclude>
     <ClInclude Include="TexturList.h">
       <Filter>Headerdateien\Framework\Grafik\3D</Filter>
     </ClInclude>
     <ClInclude Include="Animation3D.h">
       <Filter>Headerdateien\Framework\Grafik\3D</Filter>
     </ClInclude>
-    <ClInclude Include="Shader.h">
-      <Filter>Headerdateien\Framework\Objekte</Filter>
-    </ClInclude>
     <ClInclude Include="TexturModel.h">
       <Filter>Headerdateien\Framework\Objekte3D</Filter>
     </ClInclude>
+    <ClInclude Include="Shader.h">
+      <Filter>Headerdateien\Framework\Grafik\DX</Filter>
+    </ClInclude>
+    <ClInclude Include="Animation.h">
+      <Filter>Headerdateien\Framework\Objekte2D</Filter>
+    </ClInclude>
+    <ClInclude Include="Ebene3D.h">
+      <Filter>Headerdateien\Framework\Grafik\3D</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="Maus.cpp">
@@ -276,43 +270,40 @@
       <Filter>Quelldateien\Framework\OS</Filter>
     </ClCompile>
     <ClCompile Include="AlphaFeld.cpp">
-      <Filter>Quelldateien\Framework\Objekte</Filter>
+      <Filter>Quelldateien\Framework\Objekte2D</Filter>
     </ClCompile>
     <ClCompile Include="AuswahlBox.cpp">
-      <Filter>Quelldateien\Framework\Objekte</Filter>
+      <Filter>Quelldateien\Framework\Objekte2D</Filter>
     </ClCompile>
     <ClCompile Include="Diagramm.cpp">
-      <Filter>Quelldateien\Framework\Objekte</Filter>
+      <Filter>Quelldateien\Framework\Objekte2D</Filter>
     </ClCompile>
     <ClCompile Include="Fenster.cpp">
-      <Filter>Quelldateien\Framework\Objekte</Filter>
+      <Filter>Quelldateien\Framework\Objekte2D</Filter>
     </ClCompile>
     <ClCompile Include="Fortschritt.cpp">
-      <Filter>Quelldateien\Framework\Objekte</Filter>
+      <Filter>Quelldateien\Framework\Objekte2D</Filter>
     </ClCompile>
     <ClCompile Include="Knopf.cpp">
-      <Filter>Quelldateien\Framework\Objekte</Filter>
+      <Filter>Quelldateien\Framework\Objekte2D</Filter>
     </ClCompile>
     <ClCompile Include="Liste.cpp">
-      <Filter>Quelldateien\Framework\Objekte</Filter>
+      <Filter>Quelldateien\Framework\Objekte2D</Filter>
     </ClCompile>
     <ClCompile Include="Rahmen.cpp">
-      <Filter>Quelldateien\Framework\Objekte</Filter>
+      <Filter>Quelldateien\Framework\Objekte2D</Filter>
     </ClCompile>
     <ClCompile Include="Scroll.cpp">
-      <Filter>Quelldateien\Framework\Objekte</Filter>
+      <Filter>Quelldateien\Framework\Objekte2D</Filter>
     </ClCompile>
     <ClCompile Include="Tabelle.cpp">
-      <Filter>Quelldateien\Framework\Objekte</Filter>
+      <Filter>Quelldateien\Framework\Objekte2D</Filter>
     </ClCompile>
     <ClCompile Include="TextFeld.cpp">
-      <Filter>Quelldateien\Framework\Objekte</Filter>
+      <Filter>Quelldateien\Framework\Objekte2D</Filter>
     </ClCompile>
     <ClCompile Include="ToolTip.cpp">
-      <Filter>Quelldateien\Framework\Objekte</Filter>
-    </ClCompile>
-    <ClCompile Include="Animation.cpp">
-      <Filter>Quelldateien\Framework\Grafik\2D</Filter>
+      <Filter>Quelldateien\Framework\Objekte2D</Filter>
     </ClCompile>
     <ClCompile Include="Bild.cpp">
       <Filter>Quelldateien\Framework\Grafik\2D</Filter>
@@ -368,17 +359,11 @@
     <ClCompile Include="DateiDialog.cpp">
       <Filter>Quelldateien\Framework\OS\Datei</Filter>
     </ClCompile>
-    <ClCompile Include="Welt2D.cpp">
-      <Filter>Quelldateien\Framework\Grafik\2D</Filter>
-    </ClCompile>
-    <ClCompile Include="Kam2D.cpp">
-      <Filter>Quelldateien\Framework\Grafik\2D</Filter>
-    </ClCompile>
     <ClCompile Include="M2DVorschau.cpp">
-      <Filter>Quelldateien\Framework\Objekte</Filter>
+      <Filter>Quelldateien\Framework\Objekte2D</Filter>
     </ClCompile>
     <ClCompile Include="Zeichnung.cpp">
-      <Filter>Quelldateien\Framework\Objekte</Filter>
+      <Filter>Quelldateien\Framework\Objekte2D</Filter>
     </ClCompile>
     <ClCompile Include="M3Datei.cpp">
       <Filter>Quelldateien\Framework\OS\Datei</Filter>
@@ -419,10 +404,8 @@
     <ClCompile Include="TexturModel.cpp">
       <Filter>Quelldateien\Framework\Objekte3D</Filter>
     </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="TestShader.hlsl">
-      <Filter>Headerdateien\Framework\Grafik\3D</Filter>
-    </None>
+    <ClCompile Include="Animation.cpp">
+      <Filter>Quelldateien\Framework\Objekte2D</Filter>
+    </ClCompile>
   </ItemGroup>
 </Project>

+ 1 - 1
FrameworkMath.h

@@ -25,7 +25,7 @@ inline int minInt( int a, int b )
 }
 
 // Gibt den positiven Wert eines Zeichnunges zurück.
-// Klappt nur, wenn der - operator definiert ist
+// Klappt nur, wenn der - und der < 0 operator definiert ist
 template< typename T>
 inline T abs( T t )
 {

+ 0 - 310
Kam2D.cpp

@@ -1,310 +0,0 @@
-#include "Kam2D.h"
-#include "Bild.h"
-#include "Welt2D.h"
-#include "MausEreignis.h"
-#include "ToolTip.h"
-#include "TastaturEreignis.h"
-#include "Globals.h"
-
-using namespace Framework;
-
-// Inhalt der Kam2D Klasse aus Kam2D.h
-// Konstruktor
-Kam2D::Kam2D()
-{
-    welt = 0;
-    wGr.x = 0;
-    wGr.y = 0;
-    maxWGr.x = 0;
-    maxWGr.y = 0;
-    wPos.x = 0;
-    wPos.y = 0;
-    animations = new Array< KamAnimation* >();
-    ref = 1;
-}
-
-// Destruktor
-Kam2D::~Kam2D()
-{
-    if( welt )
-        welt->release();
-    animations->release();
-}
-
-// nicht constant
-void Kam2D::setWelt( Welt2D *welt )
-{
-    if( this->welt )
-        this->welt->release();
-    this->welt = welt;
-}
-
-void Kam2D::setMaxWeltGröße( int br, int hö )
-{
-    maxWGr.x = br;
-    maxWGr.y = hö;
-}
-
-void Kam2D::setWeltGröße( int x, int y, int sek )
-{
-    animations->add( new KamAnimation{ WeltGröße, (double)x, (double)y, (double)sek } );
-}
-
-void Kam2D::scrollIn( int scroll, int sek )
-{
-    animations->add( new KamAnimation{ ScrollIn, (double)scroll, 0, (double)sek } );
-}
-
-void Kam2D::scrollOut( int scroll, int sek )
-{
-    animations->add( new KamAnimation{ ScrollOut, (double)scroll, 0, (double)sek } );
-}
-
-void Kam2D::moveKam( int x, int y, int sek )
-{
-    animations->add( new KamAnimation{ MoveKam, (double)x, (double)y, (double)sek } );
-}
-
-void Kam2D::finishAnimation()
-{
-    while( animations->getEintragAnzahl() > 0 )
-    {
-        KamAnimation *a = animations->get( 0 );
-        switch( a->typ )
-        {
-        case WeltGröße:
-            wGr.x = a->w1;
-            wGr.y = a->w2;
-            break;
-        case ScrollIn:
-        {
-            double tmp = wGr.x;
-            wGr.x -= a->w1;
-            wGr.y -= ( wGr.y * a->w1 ) / tmp;
-            break;
-        }
-        case ScrollOut:
-        {
-            double tmp = wGr.x;
-            wGr.x += a->w1;
-            wGr.y += ( wGr.y * a->w1 ) / tmp;
-            break;
-        }
-        case MoveKam:
-            wPos.x = a->w1;
-            wPos.y = a->w1;
-            break;
-        }
-        animations->lösche( 0 );
-        delete a;
-    }
-}
-
-void Kam2D::clearAnimation()
-{
-    while( animations->getEintragAnzahl() > 0 )
-    {
-        delete animations->get( 0 );
-        animations->lösche( 0 );
-    }
-}
-
-bool Kam2D::tick( double t )
-{
-    int num = 0;
-    for( auto i = animations->getArray(); i.set; i++ )
-    {
-        double time = t;
-        switch( i.var->typ )
-        {
-        case WeltGröße:
-            if( i.var->sek < t )
-                time = i.var->sek;
-            wGr.x += ( i.var->w1 - wGr.x ) * time;
-            wGr.y = ( i.var->w2 - wGr.y ) * time;
-            break;
-        case ScrollIn:
-        {
-            double tmp = wGr.x;
-            wGr.x -= i.var->w1 * time;
-            wGr.y -= ( wGr.y * i.var->w1 * time ) / tmp;
-            break;
-        }
-        case ScrollOut:
-        {
-            double tmp = wGr.x;
-            wGr.x += i.var->w1 * time;
-            wGr.y += ( wGr.y * i.var->w1 * time ) / tmp;
-            break;
-        }
-        case MoveKam:
-            wPos.x += ( i.var->w1 - wPos.x ) * time;
-            wPos.y += ( i.var->w1 - wPos.y ) * time;
-            break;
-        }
-        i.var->sek -= time;
-        if( i.var->sek == 0 )
-        {
-            delete i.var;
-            animations->lösche( num );
-            num--;
-        }
-        num++;
-        rend = 1;
-    }
-    if( hatStyle( Style::MAUS_MOVE ) )
-    {
-        if( mausPos.x > 0 && mausPos.y < 30 )
-            wPos.x -= 50 * t;
-        if( mausPos.x > gr.x - 30 && mausPos.x < gr.x )
-            wPos.x += 50 * t;
-        if( mausPos.y > 0 && mausPos.y < 30 )
-            wPos.y -= 50 * t;
-        if( mausPos.y > gr.y - 30 && mausPos.y < gr.y )
-            wPos.y += 50 * t;
-    }
-    if( hatStyle( Style::TASTATUR_MOVE ) )
-    {
-        if( getTastenStand( T_Links ) )
-            wPos.x -= 50 * t;
-        if( getTastenStand( T_Rechts ) )
-            wPos.x += 50 * t;
-        if( getTastenStand( T_Oben ) )
-            wPos.y -= 50 * t;
-        if( getTastenStand( T_Unten ) )
-            wPos.y += 50 * t;
-    }
-    if( welt && hatStyle( Style::WELT_TICK ) )
-        rend |= welt->tick( t );
-    else
-        rend |= welt->tick( 0 );
-    return __super::tick( t );
-}
-
-void Kam2D::doMausEreignis( MausEreignis &me )
-{
-    if( me.verarbeitet || ( !( me.mx >= pos.x && me.mx <= pos.x + gr.x && me.my >= pos.y && me.my <= pos.y + gr.y ) && me.id != ME_Verlässt ) )
-    {
-        if( mausIn )
-        {
-            mausIn = 0;
-            if( toolTip )
-                toolTip->setMausIn( 0 );
-            MausEreignis me2;
-            me2.id = ME_Verlässt;
-            me2.mx = me.mx;
-            me2.my = me.my;
-            me2.verarbeitet = 0;
-            doMausEreignis( me2 );
-        }
-        return;
-    }
-    if( !mausIn && me.id != ME_Verlässt )
-    {
-        mausIn = 1;
-        if( toolTip )
-            toolTip->setMausIn( 1 );
-        MausEreignis me2;
-        me2.id = ME_Betritt;
-        me2.mx = me.mx;
-        me2.my = me.my;
-        me2.verarbeitet = 0;
-        doMausEreignis( me2 );
-    }
-    me.mx -= pos.x, me.my -= pos.y;
-    if( Mak && Mak( makParam, this, me ) )
-    {
-        if( welt && hatStyle( Style::WELT_EREIGNISSE ) )
-        {
-            int tmpx = me.mx;
-            int tmpy = me.my;
-            me.mx = (int)( wPos.x + me.mx * ( wGr.x / gr.x ) );
-            me.my = (int)( wPos.y + me.my * ( wGr.y / gr.y ) );
-            welt->doMausEreignis( me );
-            me.mx = tmpx;
-            me.my = tmpy;
-        }
-        if( hatStyle( Style::MAUS_MOVE ) )
-        {
-            mausPos.x = me.mx;
-            mausPos.y = me.my;
-        }
-        me.verarbeitet = 1;
-    }
-    if( nMak && me.verarbeitet )
-        me.verarbeitet = nMak( nmakParam, this, me );
-    me.mx += pos.x, me.my += pos.y;
-}
-
-void Kam2D::doTastaturEreignis( TastaturEreignis &te )
-{
-    if( te.verarbeitet )
-        return;
-    if( Tak && Tak( takParam, this, te ) )
-    {
-        if( welt && hatStyle( Style::WELT_EREIGNISSE ) )
-            welt->doTastaturEreignis( te );
-        te.verarbeitet = 1;
-    }
-    if( nTak && te.verarbeitet )
-        te.verarbeitet = nTak( ntakParam, this, te );
-}
-
-void Kam2D::render( Bild &rObj )
-{
-    if( !hatStyle( Style::Sichtbar ) )
-        return;
-    löscheStyle( Style::HScroll | Style::VScroll );
-    __super::render( rObj );
-    if( !rObj.setDrawOptions( innenPosition, innenGröße ) )
-        return;
-    if( welt )
-        welt->render( rObj, (Punkt)wPos, (Punkt)wGr, innenGröße );
-    rObj.releaseDrawOptions();
-}
-
-// constant
-Welt2D *Kam2D::zWelt() const
-{
-    return welt;
-}
-
-Welt2D *Kam2D::getWelt() const
-{
-    return welt ? welt->getThis() : 0;
-}
-
-double Kam2D::getWeltX() const
-{
-    return wPos.x;
-}
-
-double Kam2D::getWeltY() const
-{
-    return wPos.y;
-}
-
-double Kam2D::getWeltBr() const
-{
-    return wGr.x;
-}
-
-double Kam2D::getWeltHö() const
-{
-    return wGr.y;
-}
-
-// Reference Counting
-Kam2D *Kam2D::getThis()
-{
-    ref++;
-    return this;
-}
-
-Kam2D *Kam2D::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}

+ 0 - 78
Kam2D.h

@@ -1,78 +0,0 @@
-#pragma once
-
-#include "Zeichnung.h"
-#include "Array.h"
-
-namespace Framework
-{
-    class Welt2D; // Welt2D.h
-    struct MausEreignis;
-    struct TastaturEreignis;
-
-    enum KamAnimationTyp
-    {
-        WeltGröße,
-        ScrollIn,
-        ScrollOut,
-        MoveKam
-    };
-
-    struct KamAnimation
-    {
-        KamAnimationTyp typ;
-        double w1;
-        double w2;
-        double sek;
-    };
-
-    class Kam2D : public ZeichnungHintergrund
-    {
-    public:
-        class Style : public ZeichnungHintergrund::Style
-        {
-        public:
-            const static __int64 TASTATUR_MOVE = 0x001000;
-            const static __int64 MAUS_MOVE = 0x002000;
-            const static __int64 WELT_EREIGNISSE = 0x004000;
-            const static __int64 WELT_TICK = 0x008000;
-        };
-
-    private:
-        Welt2D *welt;
-        Vec2< double > wGr;
-        Punkt maxWGr;
-        Vec2< double > wPos;
-        Punkt mausPos;
-        Array< KamAnimation* > *animations;
-        int ref;
-        
-    public:
-        // Konstruktor
-        Kam2D();
-        // Destruktor
-        ~Kam2D();
-        // nicht constant
-        void setWelt( Welt2D *welt );
-        void setMaxWeltGröße( int br, int hö );
-        void setWeltGröße( int x, int y, int sek );
-        void scrollIn( int scroll, int sek );
-        void scrollOut( int scroll, int sek );
-        void moveKam( int x, int y, int sek );
-        void finishAnimation();
-        void clearAnimation();
-        bool tick( double t ) override;
-        void doMausEreignis( MausEreignis &me ) override;
-        void doTastaturEreignis( TastaturEreignis &te ) override;
-        void render( Bild &rObj ) override;
-        // constant
-        Welt2D *zWelt() const;
-        Welt2D *getWelt() const;
-        double getWeltX() const;
-        double getWeltY() const;
-        double getWeltBr() const;
-        double getWeltHö() const;
-        // Reference Counting
-        Kam2D *getThis();
-        Kam2D *release();
-    };
-}

+ 1 - 0
Kam3D.h

@@ -13,6 +13,7 @@ namespace Framework
     class Render3D; // Render3D.h
     class Welt3D; // Welt3D.h
 
+    // Eine 3d Kamera, die einen Ausschnitt einer 3D Welt in einen bestimmten Teil des Bildschirms zeichnet
     class Kam3D
     {
     private:

+ 1 - 1
Liste.cpp

@@ -818,7 +818,7 @@ void AuswahlListe::render( Bild &zRObj ) // zeichnet nach zRObj
             dy += tf->getHöhe();
         }
         if( vertikalScrollBar )
-            vertikalScrollBar->getScrollData()->maxHöhe = maxHöhe;
+            vertikalScrollBar->getScrollData()->max = maxHöhe;
     }
     zRObj.releaseDrawOptions();
     unlockZeichnung();

+ 22 - 6
M2DVorschau.h

@@ -10,15 +10,16 @@ namespace Framework
     class AlphaFeld; // AlphaFeld.h
     struct MausEreignis; // MausEreignis.h
 
+    // Eine Zeichnung des 2D GUI Frameworkd, die ein 2D Modell anzeigt
     class M2DVorschau : public ZeichnungHintergrund
     {
     public:
         class Style : public ZeichnungHintergrund::Style
         {
         public:
-            const static __int64 UsrScale = 0x001000;
-            const static __int64 UsrMove = 0x002000;
-            const static __int64 UsrRot = 0x004000;
+            const static __int64 UsrScale = 0x001000; // Wenn dieser Style gesetzt ist, kann der Benutzer das Model Skallieren, indem er scrollt
+            const static __int64 UsrMove = 0x002000; // Wenn dieser Style gesetzt ist, kann der Benutzer das Model per Drag and Drop verschieben
+            const static __int64 UsrRot = 0x004000; // Wenn dieser Style gesetzt idt, kann der Benutzer das Model mit der rechten Maustaste drehen
         };
 
     private:
@@ -35,18 +36,33 @@ namespace Framework
         __declspec( dllexport ) M2DVorschau();
         // Destruktor
         __declspec( dllexport ) ~M2DVorschau();
-        // nicht constant
+        // Setzt einen Zeiger auf das Model, das angezeigt werden soll
+        //  mdl: Das Model
         __declspec( dllexport ) void setModel2DZ( Model2D *mdl );
+        // Setzt die Daten des Models, das angezeigt werden soll
+        //  mdl: Die Daten
         __declspec( dllexport ) void setModel2D( Model2DData *mdl );
+        // Verarbeitet Maus Nachrichten
+        //  me: Das Ereignis, was durch die Mauseingabe ausgelößt wurde
         __declspec( dllexport ) void doMausEreignis( MausEreignis &me ) override;
+        // Aktualisiert das Objekt. Wird vom Framework aufgerufen
+        //  tickVal: Die Zeit in sekunden, die seit dem lezten Aufruf dieser Funktion vergangen ist
+        //  return: 1, wenn sich etwas verändert hat und das Bild neu gezeichnet werden muss. 0 sonst
         __declspec( dllexport ) bool tick( double tv ) override;
+        // Zeichnet das Objekt nach zRObj, falls es sichtbar ist
+        //  zRObj: Das Bild, in welches gezeichnet werden soll
         __declspec( dllexport ) void render( Bild &rb ) override;
-        // constant
+        // Gibt das angezeigte Model ohne erhöhten Reference Counter zurück
         __declspec( dllexport ) Model2D *zModel() const;
+        // Gibt das angezeigte Model zurück
         __declspec( dllexport ) Model2D *getModel() const;
+        // Erzeugt eine Komplette Kopie der Zeichnung, die ohne auswirkungen auf die Originale verändert werden kann
         __declspec( dllexport ) Zeichnung *dublizieren() const override;
-        // Reference counting
+        // Erhöht den Reference Counting Zähler.
+        //  return: this.
         __declspec( dllexport ) M2DVorschau *getThis();
+        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
+        //  return: 0.
         __declspec( dllexport ) M2DVorschau *release();
     };
 }

+ 1 - 0
M3Datei.h

@@ -7,6 +7,7 @@ namespace Framework
     class Text;
     class Model3DData;
 
+    // Verwaltet eine Datei, in der 3d Modelle abgespeichert wurden
     class M3Datei
     {
     private:

+ 22 - 6
Mat3.h

@@ -6,33 +6,41 @@
 namespace Framework
 {
 	template< typename T >
+    // Eine 3x3 Matrix
 	class Mat3
 	{
 	public:
-		// [ Zeile ][ Spalte ] ( [ y ][ x ] )
-		T elements[ 3 ][ 3 ];
-		// nicht constant
+		T elements[ 3 ][ 3 ]; // Die Elemente der Matrix
+		// Kopiert die Elemente einer anderen Matrix in diese
+        //  r: Die andere Matrix
 		Mat3 &operator=( const Mat3 &r )
 		{
 			memcpy( elements, r.elements, sizeof( elements ) );
 			return *this;
 		}
+        // Multipliziert alle Werte mit einem Skalar und speichert das Ergebnis in dieser
+        //  r: Der Skalar
 		Mat3 &operator*=( const T r )
 		{
 			for( T &e : elements )
-				r *= r;
+				e *= r;
 			return *this;
 		}
+        // Multipliziert die Matrix mit einer anderen und speichert das Ergebnis in dieser
+        //  r: Die andere Matrix
 		Mat3 &operator*=( const Mat3 &r )
 		{
 			return *this = *this * r;
 		}
-		// constant
+        // Multipliziert alle Werte mit einem Skalar ohne diese zu verändern
+        //  r: Der Skalar
 		Mat3 operator*( const T r ) const
 		{
 			Mat3 result = *this;
 			return result *= r;
 		}
+        // Multipliziert die Matrix mit einer anderen ohne diese zu verändern
+        //  r: Die andere Matrix
 		Mat3 operator*( const Mat3 &r ) const
 		{
 			Mat3 result;
@@ -48,6 +56,8 @@ namespace Framework
 			}
 			return result;
 		}
+        // Multipliziert die Matrix mit einem Vektor ohne diese zu verändern
+        //  r: Der Vektor
 		Vec2< T > operator*( const Vec2< T > r ) const
 		{
 			Vec2< T > result;
@@ -55,7 +65,8 @@ namespace Framework
 			result.y = elements[ 1 ][ 0 ] * r.x + elements[ 1 ][ 1 ] * r.y + elements[ 1 ][ 2 ];
 			return  result;
 		}
-		// static
+        // Erzeugt eine Matrix, die verwendet wird, um einen Vektor zu drehen, wenn sie mit ihm multipliziert wird
+        //  radian: Der Winkel im Bogenmas, um dem der Vektor gedreht werden soll
 		static Mat3 rotation( T radian )
 		{
 			const T cosTheta = (T)cos( radian );
@@ -63,16 +74,21 @@ namespace Framework
 			Mat3 r = { cosTheta, -sinTheta, 0, sinTheta, cosTheta, 0, 0, 0, 1 };
 			return r;
 		}
+        // Erzeugt eine Matrix, die einen Vektor skalliert. wenn sie mit ihm multipliziert wird
+        //  faktor: Der Faktor, um den Skalliert werden soll
 		static Mat3 scaling( T faktor )
 		{
 			Mat3 s = { faktor, 0, 0, 0, faktor, 0, 0, 0, 1 };
 			return s;
 		}
+        // Erzeugt eine Matrix, die einen Vektor verschiebt, wenn sie mit ihm multipliziert wird
+        //  offset: Die x und y Werte, die zu dem Vektor dazu addiert werden sollen
 		static Mat3 translation( const Vec2< T > offset )
 		{
 			Mat3 t = { 1, 0, offset.x, 0, 1, offset.y, 0, 0, 1 };
 			return t;
 		}
+        // Erzeugt eine MAtrix, die mit allem multiplizert werden kann, ohne es zu verändern
 		static Mat3 identity()
 		{
 			Mat3 i = { 1, 0, 0, 0, 1, 0, 0, 0, 1 };

+ 35 - 6
Mat4.h

@@ -5,33 +5,41 @@
 namespace Framework
 {
     template< typename T >
+    // Eine 4x4 Matrix
     class Mat4
     {
     public:
-        // [ Zeile ][ Spalte ] ( [ y ][ x ] )
-        T elements[ 4 ][ 4 ];
-        // nicht constant
+        T elements[ 4 ][ 4 ]; // Die Elemente der Matrix
+        // Kopiert alle Werte einer anderen Matrix
+        //  r: Die andere Matrix
         Mat4 &operator=( const Mat4 &r )
         {
             memcpy( elements, r.elements, sizeof( elements ) );
             return *this;
         }
+        // Skalliert die Matrix
+        //  r: der Faktor
         Mat4 &operator*=( const T r )
         {
             for( T &e : elements )
-                r *= r;
+                e *= r;
             return *this;
         }
+        // Multipliziert die MAtrix mit einer anderen
+        //  r: Die andere Matrix
         Mat4 &operator*=( const Mat4 &r )
         {
             return *this = *this * r;
         }
-        // constant
+        // Skalliert die Matrix ohne sie zu verändern
+        //  r: der Faktor
         Mat4 operator*( const T r ) const
         {
             Mat4 result = *this;
             return result *= r;
         }
+        // Multipliziert zwei Matrizen
+        //  r: Die andere Matrix
         Mat4 operator*( const Mat4 &r ) const
         {
             Mat4 result;
@@ -47,6 +55,8 @@ namespace Framework
             }
             return result;
         }
+        // Multiplziert die Matrix mit einem Vektor
+        //  r: Der Vektor
         Vec3< T > operator*( const Vec3< T > &r ) const
         {
             Vec3< T > result;
@@ -55,7 +65,8 @@ namespace Framework
             result.z = elements[ 2 ][ 0 ] * r.x + elements[ 2 ][ 1 ] * r.y + elements[ 2 ][ 2 ] * r.z + elements[ 2 ][ 3 ];
             return  result;
         }
-        // static
+        // Erzeugt eine Matrix, die einen Vektor um die Z Achse dreht, wenn sie mit ihm multipliziert wird
+        //  radian: Der Winkel in Bogenmas
         static Mat4 rotationZ( T radian )
         {
             const T cosTheta = (T)cos( radian );
@@ -63,6 +74,8 @@ namespace Framework
             Mat4 r = { cosTheta, -sinTheta, 0, 0, sinTheta, cosTheta, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 };
             return r;
         }
+        // Erzeugt eine Matrix, die einen Vektor um die X Achse dreht, wenn sie mit ihm multipliziert wird
+        //  radian: Der Winkel in Bogenmas
         static Mat4 rotationX( T radian )
         {
             const T cosTheta = (T)cos( radian );
@@ -70,6 +83,8 @@ namespace Framework
             Mat4 r = { 1, 0, 0, 0, 0, cosTheta, -sinTheta, 0, 0, sinTheta, cosTheta, 0, 0, 0, 0, 1 };
             return r;
         }
+        // Erzeugt eine Matrix, die einen Vektor um die Y Achse dreht, wenn sie mit ihm multipliziert wird
+        //  radian: Der Winkel in Bogenmas
         static Mat4 rotationY( T radian )
         {
             const T cosTheta = (T)cos( radian );
@@ -77,21 +92,34 @@ namespace Framework
             Mat4 r = { cosTheta, 0, sinTheta, 0, 0, 1, 0, 0, -sinTheta, 0, cosTheta, 0, 0, 0, 0, 1 };
             return r;
         }
+        // Erzeugt eine Matrix, die einen Vektor Skalliert, wenn sie mit ihm multipliziert wird
+        //  faktor: Der Faktor
         static Mat4 scaling( T faktor )
         {
             Mat4 s = { faktor, 0, 0, 0, 0, faktor, 0, 0, 0, 0, faktor, 0, 0, 0, 1 };
             return s;
         }
+        // Erzeugt eine Matrix, die einen Vektor Skalliert, wenn sie mit ihm multipliziert wird
+        //  faktorX: Der Faktor für die X Komponente des Vektors
+        //  faktorY: Der Faktor für die Y Komponente des Vektors
+        //  faktorZ: Der Faktor für die Z Komponente des Vektors
         static Mat4 scaling( T faktorX, T faktorY, T faktorZ )
         {
             Mat4 s = { faktorX, 0, 0, 0, 0, faktorY, 0, 0, 0, 0, faktorZ, 0, 0, 0, 1 };
             return s;
         }
+        // Erzeugt eine Matrix, die einen Vektor verchiebt, wenn sie mit ihm multipliziert wird
+        //  offset: Die Koordinaten, um die der Vektor verschoben werden soll
         static Mat4 translation( const Vec3< T > offset )
         {
             Mat4 t = { 1, 0, 0, offset.x, 0, 1, 0, offset.y, 0, 0, 1, offset.z, 0, 0, 0, 1 };
             return t;
         }
+        // Erzeugt eine Matrix, die einen Vektor auf den Bildschirm Projeziert
+        //  öffnungswinkel: Der Öffnungswinkel der Kamera im Bogenmas
+        //  bildschirmXY: Das Seitenverhältnis des Rechtecks auf dem Bildschirm, in dem gezeichnet werden soll. (Breite / Höhe)
+        //  minz: Der Mindestabstand zur Kamera, ab dem gezeichnet wird
+        //  maxZ: Der Maximalabstand zur Kamera, ab dem nicht mehr gezeichnet wird
         static Mat4 projektion( float öffnungswinkel, float bildschirmXY, float minZ, float maxZ )
         {
             Mat4 p = { (float)( 1 / tan( öffnungswinkel / 2 ) ) / bildschirmXY, 0, 0, 0,
@@ -100,6 +128,7 @@ namespace Framework
                 0, 0, 1, 0 };
             return p;
         }
+        // Erzeugt eine Matrix, die mit allem Multipliziert werden kann ohne es zu ändern
         static Mat4 identity()
         {
             Mat4 i = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 };

+ 1 - 1
MausEreignis.h

@@ -44,7 +44,7 @@ namespace Framework
 
     // Standart Maus Ereinis Rückruffunktion
     //  param: Ein beliebiger Parameter
-    //  obj: Das Zeichnung, welches diese Funktion aufruft
+    //  obj: Die Zeichnung, welches diese Funktion aufruft
     //  te: Das Mausereignis, welches verarbeitet werden soll
     //  return: (true), wenn aufrufende Zeichnung das Ereignis weiterverarbeiten soll. (false) sonnst.
     // Gibt immer (true) zurück

+ 62 - 12
Model2D.h

@@ -14,6 +14,7 @@ namespace Framework
 	typedef Vec2< float > Vertex;
 	class Bild;
 
+    // Eine Polygon Struktur, die von Model2D verwendet wird
 	// Model2D Klasse löscht die Zeiger
 	struct Polygon2D
 	{
@@ -21,14 +22,20 @@ namespace Framework
 		Array< Punkt > *tKordinaten;
 	};
 
+    // Die Daten für ein 2D Model
 	class Model2DData
 	{
 	private:
 		RCArray< Array< Punkt > > outList;
 		int ref;
 
-		// privat
+		// Überprüft, ob ein Punkt im Model ist
+        //  p: Der Punkt
+        //  polygonId: Die Id des Polygons, das geprüft werden soll
 		bool istPunktInnen( Vertex p, int polygonId = -1 ) const;
+        // Überprüft, ob eine Linie innerhalb des Models ist
+        //  a: Der Startpunkt der Linie
+        //  b: Der Endpunkt der Linie
 		bool istLinieInnen( Vertex a, Vertex b, int polygonId = -1 ) const;
 
 	public:
@@ -40,15 +47,22 @@ namespace Framework
 		__declspec( dllexport ) Model2DData();
 		// Destruktor
 		__declspec( dllexport ) ~Model2DData();
-		// nicht constant
+		// Erstellt die Dreieck Listen anhand aller gegebenen Eckpunkte der Polygons
+        //  polygons: Ein Array von Polygons
+        //  return: gibt immer 1 zurück
 		__declspec( dllexport ) bool erstelleModell( Array< Polygon2D > *polygons );
-		__declspec( dllexport ) void löscheModell(); // setzt die Vertex daten zurück
-		// Reference Counting
+        // Löscht die erstellten Dreiecklisten und die Eckpunkte
+		__declspec( dllexport ) void löscheModell();
+        // Erhöht den Reference Counting Zähler.
+        //  return: this.
 		__declspec( dllexport ) Model2DData *getThis();
+        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
+        //  return: 0.
 		__declspec( dllexport ) Model2DData *release();
 	};
 
 #ifdef WIN32
+    // Eine Zeichnung von einem Model
 	class Model2D : public Zeichnung
 #else
 	class Model2D
@@ -59,10 +73,10 @@ namespace Framework
         class Style : public Zeichnung::Style
         {
         public:
-            const static __int64 Textur = 0x8;
-            const static __int64 Rahmen = 0x10;
-            const static __int64 Alpha = 0x40;
-            const static __int64 Mesh = 0x20;
+            const static __int64 Textur = 0x8; // Wenn dieser Flag gesetzt ist, wird beim Zeichnen eine Textur verwendet
+            const static __int64 Rahmen = 0x10; // Wenn dieser Flag gesetzt ist, werden die Render der Polygone gezeichnet
+            const static __int64 Alpha = 0x40; // Wenn dieser Fag gesetzt ist, wird beim Zeichnen alphablending verwendet
+            const static __int64 Mesh = 0x20; // Wenn dieser Flag gesetzt ist, werden die Render der Dreiecke gezeichnet
         };
 #endif
 	private:
@@ -82,34 +96,70 @@ namespace Framework
 		__declspec( dllexport ) Model2D();
 		// Destruktor
 		__declspec( dllexport ) ~Model2D();
-		// nicht constant
+		// Setzt die Daten des Models
+        //  mdl: Die Model Daten
 		__declspec( dllexport ) void setModel( Model2DData *mdl );
+        // Setzt die Drehung des Models gegen den Uhrzeigersinn
+        //  drehung: Der winkel in Bogenmas
 		__declspec( dllexport ) void setDrehung( float drehung );
+        // Fügt zum aktuellen Drehungswinkel etwas hinzu
+        //  drehung: Der Winkel in Bogenmas, der hinzugefügt werden soll
 		__declspec( dllexport ) void addDrehung( float drehung );
+        // Setzt die Skallierung des Modells
+        //  größe: Der Faktor, mit dem Skalliert wird
 		__declspec( dllexport ) void setGröße( float größe );
+        // Addiert zur Skallierung einen bestimmten Wert hinzu
+        //  größe: Der Wert, der zur skallierung hinzugefügt werden soll
 		__declspec( dllexport ) void addGröße( float größe );
 #ifdef WIN32
+        // Setzt die Textur
+        //  t: Das Bild, das als Textur verwendet werden soll
 		__declspec( dllexport ) void setTextur( Bild *t );
+        // Setzt die Farbe
+        //  f: Die Farbe im A8R8G8B8 Format
 		__declspec( dllexport ) void setFarbe( int f );
+        // Verarbeitet ein Maus Ereignis. Wird vom Framework automatisch aufgerufen.
+        //  me: Das Ereignis
 		__declspec( dllexport ) void doMausEreignis( MausEreignis &me ) override;
+        // Verarbeitet die Zeit, die seit dem letzten aufruf dieser Funktion vergangen ist
+        //  tickVal: Die vergangene Zeit in Sekunden
 		__declspec( dllexport ) bool tick( double tickVal ) override;
+        // Zeichnet die Zeihnung in ein bestimmtes Bild
+        //  zRObj: Das Bild, in das gezeichnet werden soll
 		__declspec( dllexport ) void render( Bild &zRObj ) override;
 #else
+        // Setzt die Position
+        //  p: Die neue Position
 		__declspec( dllexport ) void setPosition( Punkt p );
 #endif
-		// constant
+		// gibt die Drehung des Models zurück
 		__declspec( dllexport ) float getDrehung() const;
+        // gibt den Skallierungs Faktor zurück
 		__declspec( dllexport ) float getGröße() const;
-		__declspec( dllexport ) bool istPunktInnen( Vertex p ) const;
+        // Gibt zurück, ob ein Punkt in dem Model enthalten ist
+		//  p: Der Punkt
+        __declspec( dllexport ) bool istPunktInnen( Vertex p ) const;
+        // Überprüft, ob eine Linie im Model enthalten ist
+        //  a: Der startpunkt der Linie
+        //  b: Der endpunkt der Linie
 		__declspec( dllexport ) bool istLinieInnen( Vertex a, Vertex b ) const;
+        // Überprüft, ob sich das Model mit einem anderen Überschneidet
+        //  zMdl: Ein Zeiger auf das andere Model ohne erhöhten Reference Counter
+        //  end: 0, falls alle Ecken beider Modele überprüft werdden sollen. 1, falls nur die Punkte dieses Models im anderen gesucht werden sollen
 		__declspec( dllexport ) bool istModelInnen( const Model2D *zMdl, bool end = 0 ) const;
+        // Gibt die Model Daten zurück
 		__declspec( dllexport ) Model2DData *getModel() const;
+        // Gibt die Model Daten ohne erhöhten Reference Counter zurück
 		__declspec( dllexport ) Model2DData *zModel() const;
 #ifndef WIN32
+        // Gibt die Position des Models zurück
 		Punkt getPosition() const;
 #endif
-		// Reference Counting
+        // Erhöht den Reference Counting Zähler.
+        //  return: this.
 		__declspec( dllexport ) Model2D *getThis();
+        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
+        //  return: 0.
 		__declspec( dllexport ) Model2D *release();
 	};
 }

+ 12 - 7
Model3D.h

@@ -18,6 +18,7 @@ namespace Framework
     class Model3DTextur; // Model3D.h
     class Model3DList; // Model3DList.h
 
+    // Repräsentiert einen Knochen eines 3D Models. Kann annimiert werden
     class Knochen
     {
     private:
@@ -57,6 +58,7 @@ namespace Framework
         __declspec( dllexport ) int getId() const;
     };
 
+    // Repräsentiert alle Knochen eines Models, mit denen es Annimiert werden kann
     class Skelett
     {
     private:
@@ -92,18 +94,20 @@ namespace Framework
         __declspec( dllexport ) Skelett *release();
     };
 
+    // Eine struktor um für eine Ecke eines 3D Models die Raum Position, die Textur Koordinaten und den zugehörigen Knochen speichert
     struct Vertex3D
     {
-        Vec3< float > pos;
-        Vec2< float > tPos;
-        int knochenId;
+        Vec3< float > pos; // Die Position der Ecke basierend zur Position des Knochens
+        Vec2< float > tPos; // Die Textur Koordinaten der Ecke
+        int knochenId; // Die Id des Knochens, mit dem sich die Ecke bei einer Annimation mitbewegt
     };
 
+    // Eine Struktur, die alle Dreiecke eines 3D Polygons speichert
     struct Polygon3D
     {
-        int *indexList;
-        int indexAnz;
-        DXIndexBuffer *indexBuffer;
+        int *indexList; // Die Liste mit den IDs der Ecken
+        int indexAnz; // Die Länge der Liste mit den Ids der Ecken
+        DXIndexBuffer *indexBuffer; // Die DirectX11 Struktur, die die Liste mit IDs der Ecken verwaltet
 
         // Konstruktor
         __declspec( dllexport ) Polygon3D();
@@ -112,7 +116,7 @@ namespace Framework
     };
 
     // Speichert alle Geometrischen Daten eines Modells, also
-    // Raum - und Textur Koordinaten aller Eckpunkte
+    // Raum - und Textur Koordinaten und Knochenzugehörigkeit aller Eckpunkte
     class Model3DData
     {
     private:
@@ -209,6 +213,7 @@ namespace Framework
         __declspec( dllexport ) Model3DTextur *release();
     };
 
+    // Eine Zeichnung des 3D Frameworks, die ein 3D Model mit Textur und Animation darstellen kann
     class Model3D : public Zeichnung3D
     {
     protected:

+ 1 - 1
Model3DList.h

@@ -10,7 +10,7 @@ namespace Framework
 
     namespace Standart3DTypes
     {
-        const static char *würfel = "f_würfel";
+        const static char *würfel = "f_würfel"; // Die Modeldaten eines Würfels der 100 * 100 * 100 groß ist
     };
 
     // Verwaltet alle geladenen Modeldaten, so dass mehrere Zeichnungen die selben Daten benutzen können

+ 26 - 12
Rahmen.h

@@ -10,7 +10,8 @@ namespace Framework
 	struct HScrollData; // Scroll.h
 	class LRahmen; // aus dieser Datei
 
-	class LRahmen : public Zeichnung // Ramen aus Linien
+    // Eine Zeichnung des 2D GUI Frameworks, die einen Linienrahmen um ein Rechteck zeichnet
+	class LRahmen : public Zeichnung
 	{
 	private:
 		int br;
@@ -21,18 +22,31 @@ namespace Framework
 	public:
 		// Konstruktor 
 		__declspec( dllexport ) LRahmen();
-		// nicht constant 
-		__declspec( dllexport ) void setRamenBreite( int br ); // setzt die Breite des Rahmens
-		__declspec( dllexport ) void setAlpha( bool a ); // Legt fest, ob der Alphawert der Farbe berücksichtigt werden soll
-		__declspec( dllexport ) void setFarbe( int f ); // Legt die Farbe des Rahmens fest
-		__declspec( dllexport ) void render( Bild &zRObj ) override; // Zeichnet den Rahmen in das RenderZeichnung
-		// constant 
-		__declspec( dllexport ) int getRBreite() const; // Gibt die Breite des Rahmens zurück
-		__declspec( dllexport ) int getFarbe() const; // Gibt die Farbe des Ramens zurück
-		__declspec( dllexport ) bool hatAlpha() const; // Gibt zurück, ob der Alphawert der Farbe beachtet wird
-		__declspec( dllexport ) Zeichnung *dublizieren() const override; // Kopiert das Zeichnung
-		// Reference Counting 
+		// Setzt die Breite des Rahmens
+        //  br: Die Breite in Pixeln
+		__declspec( dllexport ) void setRamenBreite( int br );
+        // Legt fest, ob beim zeichnen alpha blending verwendet werden soll
+        //  a: 1, falls alpha blending verwendet werden soll
+        __declspec( dllexport ) void setAlpha( bool a );
+        // Setzt die Fare des Rahmens
+        //  f: Die Farbe im A8R8G8B8 Format
+		__declspec( dllexport ) void setFarbe( int f );
+        // Zeichnet den Rahmen
+        //  zRObj: Das Bild, in den der Rahmen gezeichnet werden soll
+		__declspec( dllexport ) void render( Bild &zRObj ) override;
+		// Gibt die Breite des Rahmens in Pixeln zurück
+		__declspec( dllexport ) int getRBreite() const;
+        // Gibt die Farbe des Rahmens im A8R8G8B8 Format zurück
+		__declspec( dllexport ) int getFarbe() const;
+        // Gibt zurück, ob der Rahmen mit Alpha Blending gezeichnet wird
+		__declspec( dllexport ) bool hatAlpha() const;
+        // Kopiert den Rahmen, so dass er ohne auswirkungen auf das Original verändert werden kann
+		__declspec( dllexport ) Zeichnung *dublizieren() const override;
+        // Erhöht den Reference Counting Zähler.
+        //  return: this.
 		__declspec( dllexport ) LRahmen *getThis();
+        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
+        //  return: 0.
 		__declspec( dllexport ) LRahmen *release();
 	};
 }

+ 3 - 2
Render3D.h

@@ -2,7 +2,7 @@
 
 #include "Array.h"
 #include "Mat4.h"
-#include "Vec4.h"
+#include "Ebene3D.h"
 
 struct ID3D11Device;
 struct ID3D11DeviceContext;
@@ -18,13 +18,14 @@ namespace Framework
     class Textur; // Textur.h
     class Model3D; // Model3D.h
 
+    // Verwaltet die Zeichenfunktionen der Grafikkarte und wird zum Zeichnen von 3D Modelen verwendet. Wird von Bildschirm3D automatisch erzeugt.
     class Render3D
     {
     private:
         Mat4< float > matrixBuffer[ 128 ];
         Mat4< float > view;
         Mat4< float > proj;
-        Vec4< float > frustrum[ 6 ];
+        Ebene3D< float > frustrum[ 6 ];
         Vec3< float > kamPos;
         ID3D11Device *device;
         ID3D11DeviceContext *context;

+ 40 - 15
RenderThread.h

@@ -9,6 +9,7 @@ namespace Framework
 	class ZeitMesser; // ZeitMesser.h
 	class Bild; // Bild.h
 
+    // Ein Thread, der ein Bildschirm verwaltet. Er ruft die render() und tick() funktionen automatisch auf
 	class RenderTh : private Thread
 	{
 	private:
@@ -30,25 +31,49 @@ namespace Framework
 		__declspec( dllexport ) RenderTh();
 		// Destruktor 
 		__declspec( dllexport ) ~RenderTh();
-		// nicht constant 
+        // Dies ist notwendig, falls mehrere Threads gleichzeitig das Objekt benutzen.
+        // Wenn lock() von zwei threads aufgerufen wird, wartet der letzte so lange, bis der erste unlock() aufgerufen hat.
 		__declspec( dllexport ) void lock();
+        // Dies ist notwendig, falls mehrere Threads gleichzeitig das Objekt benutzen.
+        // Wenn lock() von zwei threads aufgerufen wird, wartet der letzte so lange, bis der erste unlock() aufgerufen hat.
 		__declspec( dllexport ) void unlock();
-		__declspec( dllexport ) void setBildschirm( Bildschirm *bildschirm ); // setzt den Bildschirm
-		__declspec( dllexport ) void thread() override; // Render Schleife
-		__declspec( dllexport ) void beginn(); // beginnt rendering
-		__declspec( dllexport ) void beenden(); // beendet den Thread
-		__declspec( dllexport ) void setMaxFps( int fps ); // setzt die Anzahl der Bilder pro Sekunde
-		__declspec( dllexport ) void setPause( bool p ); // Renderpause
-		__declspec( dllexport ) void setRenderFunktion( void ( *rF )( void *, void *, Bild * ) ); // setzt die Rückruf Funktion beim Rendern
-		__declspec( dllexport ) void setTickFunktion( void ( *tF )( void *, void *, double ) ); // setzt die Rückruf Funktion beim Tick
-		__declspec( dllexport ) void setRenderFunktionParameter( void *p ); // setzt den Parameter der Rückruf Funktion beim Rendern
-		__declspec( dllexport ) void setTickFunktionParameter( void *p ); // setzt den Parameter der Rückruf Funktion beim Tick
-		// constant
-		__declspec( dllexport ) Bildschirm *getBildschirm() const; // gibt den Bildschirm zurück
+        // Setzt das Bildschirm Objekt, das verwaltet werden soll
+        //  bildschirm: Der Bildschirm
+		__declspec( dllexport ) void setBildschirm( Bildschirm *bildschirm );
+        // Die Funktion, die automatisch in einem neuen Thread ausgeführt wird
+		__declspec( dllexport ) void thread() override;
+        // Beginnt den Render Thread
+		__declspec( dllexport ) void beginn();
+        // Beendet den Render Thread
+		__declspec( dllexport ) void beenden();
+        // Setzt die maximalen Bilder pro Sekunde
+        //  fps: maximale Bilder pro Sekunde
+		__declspec( dllexport ) void setMaxFps( int fps );
+        // Pausiert den Render Thread
+        //  p: 1, wenn der Thread pausiert werden soll
+		__declspec( dllexport ) void setPause( bool p );
+        // Setzt die Rückruffunktion, die immer vor dem Zeichnen aufgerufen wird
+        //  rF: Die Rückruffunktion
+		__declspec( dllexport ) void setRenderFunktion( void ( *rF )( void *, void *, Bild * ) );
+        // Setzt die Rückruffunktion, die immer vor dem Aktualisieren aller Objekte aufgerufen wird
+        //  rF: Die Rückruffunktion
+		__declspec( dllexport ) void setTickFunktion( void ( *tF )( void *, void *, double ) );
+        // Setzt den Parameter der Rückruffunktion, die immer vor dem Zeichnen aufgerufen wird
+        //  p: Der Parameter
+		__declspec( dllexport ) void setRenderFunktionParameter( void *p );
+        // Setzt den Parameter der Rückruffunktion, die immer vor dem Aktualisieren aller Objekte aufgerufen wird
+		__declspec( dllexport ) void setTickFunktionParameter( void *p );
+		// Gibt den Bildschirm zurück, der von dem Thread verwaltet wird
+		__declspec( dllexport ) Bildschirm *getBildschirm() const;
+        // Gibt den Bildschirm ohne erhöhten Reference Counter zurück, der von dem Thread verwaltet wird
 		__declspec( dllexport ) Bildschirm *zBildschirm() const;
-		__declspec( dllexport ) double getRenderTickZeit() const; // gibt die Zeit zurück, die zum Rendern und zum Tick benötigt wird
-		// Reference Counting
+        // Gibt die Zeit zurück, mit der die tick() Funktion des Bildschirms als letztes aufgerufen wurde
+		__declspec( dllexport ) double getRenderTickZeit() const;
+        // Erhöht den Reference Counter um 1
+        //  Return: Ein zeiger auf diesen Shader
 		__declspec( dllexport ) RenderTh *getThis();
+        // Verringert den Reference Counter und löscht den Shader, falls der Refeence Counter auf 0 ist
+        //  Return: 0
 		__declspec( dllexport ) RenderTh *release();
 	};
 }

+ 162 - 274
Scroll.cpp

@@ -6,8 +6,8 @@ using namespace Framework;
 
 // Inhalt der VScrollBar Klasse aus Scroll.h
 // Konstruktor 
-VScrollBar::VScrollBar()
-	: data(new VScrollData()),
+ScrollBar::ScrollBar()
+	: data(new ScrollData()),
 	  knopfdruck( 0 ),
 	  farbe( 0xFF808080),
 	  bgFarbe( 0xFF000000 ),
@@ -22,144 +22,82 @@ VScrollBar::VScrollBar()
 }
 
 // Destruktor 
-VScrollBar::~VScrollBar()
+ScrollBar::~ScrollBar()
 {
 	delete data;
 }
 
 // nicht constant
-void VScrollBar::setFarbe( int fc )
+void ScrollBar::setFarbe( int fc )
 {
 	farbe = fc;
 	rend = 1;
 }
 
-void VScrollBar::setBgFarbe( int fc, bool bgF )
+void ScrollBar::setBgFarbe( int fc, bool bgF )
 {
 	bgFarbe = fc;
 	bg = bgF;
 	rend = 1;
 }
 
-void VScrollBar::update( int maxHöhe, int anzeigeHöhe )
+void ScrollBar::update( int maxGr, int anzeigeGr )
 {
-	if( data->maxHöhe != maxHöhe || data->anzeigeHöhe != anzeigeHöhe )
+	if( data->max != maxGr || data->anzeige != anzeigeGr )
 	{
-		data->maxHöhe = maxHöhe, data->anzeigeHöhe = anzeigeHöhe;
+		data->max = maxGr, data->anzeige = anzeigeGr;
 		rend = 1;
 	}
-	if( data->anzeigeBeginn > data->maxHöhe - data->anzeigeHöhe && data->maxHöhe - data->anzeigeHöhe >= 0 )
+	if( data->scrollPos > data->max - data->anzeige && data->max - data->anzeige >= 0 )
 	{
-		data->anzeigeBeginn = data->maxHöhe - data->anzeigeHöhe;
+		data->scrollPos = data->max - data->anzeige;
 		rend = 1;
 	}
-	if( data->anzeigeBeginn < 0 )
+	if( data->scrollPos < 0 )
 	{
-		data->anzeigeBeginn = 0;
+		data->scrollPos = 0;
 		rend = 1;
 	}
 }
 
-void VScrollBar::setKlickScroll( int ks )
+void ScrollBar::setKlickScroll( int ks )
 {
 	klickScroll = ks;
 	rend = 1;
 }
 
-void VScrollBar::scroll( int höhe )
+void ScrollBar::scroll( int höhe )
 {
-	data->anzeigeBeginn = höhe;
-	if( data->anzeigeBeginn > data->maxHöhe - data->anzeigeHöhe )
-		data->anzeigeBeginn = data->maxHöhe - data->anzeigeHöhe;
-	if( data->anzeigeBeginn < 0 )
-		data->anzeigeBeginn = 0;
+	data->scrollPos = höhe;
+	if( data->scrollPos > data->max - data->anzeige )
+		data->scrollPos = data->max - data->anzeige;
+	if( data->scrollPos < 0 )
+		data->scrollPos = 0;
 	rend = 1;
 }
 
-bool VScrollBar::doMausMessage( int x, int y, int br, int hö, MausEreignis &me )
-{
-    bool ret = me.mx >= x && me.mx <= x + br && me.my >= y && me.my <= y + hö;
-	knopfdruck = 0;
-	if( me.verarbeitet )
-	{
-		mx = -1, my = -1;
-		mp = 0;
-		return ret;
-	}
-	if( me.id == ME_UScroll )
-	{
-		data->anzeigeBeginn -= klickScroll;
-		if( data->anzeigeBeginn < 0 )
-			data->anzeigeBeginn = 0;
-		rend = 1;
-		return ret;
-	}
-	if( me.id == ME_DScroll )
-	{
-		data->anzeigeBeginn += klickScroll;
-		if( data->anzeigeBeginn > data->maxHöhe - data->anzeigeHöhe )
-			data->anzeigeBeginn = data->maxHöhe - data->anzeigeHöhe;
-		if( data->anzeigeBeginn < 0 )
-			data->anzeigeBeginn = 0;
-		rend = 1;
-		return ret;
-	}
-	if( ret )
-		mx = me.mx - x, my = me.my - y;
-	else
-		mx = -1, my = -1;
-	if( me.id == ME_PLinks )
-		mp = 1;
-	if( me.id == ME_RLinks )
-		mp = 0;
-	if( mp )
-	{
-		if( mx >= 0 && my >= 0 )
-		{
-			if( my < br )
-			{
-				knopfdruck = 1;
-				data->anzeigeBeginn -= klickScroll;
-			}
-			else if( my > hö - br )
-			{
-				knopfdruck = 2;
-				data->anzeigeBeginn += klickScroll;
-			}
-			else
-				data->anzeigeBeginn = (int)( ( data->maxHöhe / ( hö - 2.0 * br ) ) * ( my - br ) ) - data->anzeigeHöhe / 2;
-			if( data->anzeigeBeginn > data->maxHöhe - data->anzeigeHöhe )
-				data->anzeigeBeginn = data->maxHöhe - data->anzeigeHöhe;
-			if( data->anzeigeBeginn < 0 )
-				data->anzeigeBeginn = 0;
-			rend = 1;
-		}
-	}
-    return ret;
-}
-
-bool VScrollBar::getRend()
+bool ScrollBar::getRend()
 {
 	if( knopfdruck == 1 )
 	{
-		int tmp = data->anzeigeBeginn;
-		data->anzeigeBeginn -= klickScroll;
-		if( data->anzeigeBeginn > data->maxHöhe - data->anzeigeHöhe )
-			data->anzeigeBeginn = data->maxHöhe - data->anzeigeHöhe;
-		if( data->anzeigeBeginn < 0 )
-			data->anzeigeBeginn = 0;
-		if( tmp != data->anzeigeBeginn )
+		int tmp = data->scrollPos;
+		data->scrollPos -= klickScroll;
+		if( data->scrollPos > data->max - data->anzeige )
+			data->scrollPos = data->max - data->anzeige;
+		if( data->scrollPos < 0 )
+			data->scrollPos = 0;
+		if( tmp != data->scrollPos )
 			rend = 1;
 	}
 	if( knopfdruck == 2 )
 	{
-		int tmp = data->anzeigeBeginn;
-		data->anzeigeBeginn += klickScroll;
-		if( data->anzeigeBeginn > data->maxHöhe - data->anzeigeHöhe )
-			data->anzeigeBeginn = data->maxHöhe - data->anzeigeHöhe;
-		if( data->anzeigeBeginn < 0 )
-			data->anzeigeBeginn = 0;
-		if( tmp != data->anzeigeBeginn )
+		int tmp = data->scrollPos;
+		data->scrollPos += klickScroll;
+		if( data->scrollPos > data->max - data->anzeige )
+			data->scrollPos = data->max - data->anzeige;
+		if( data->scrollPos < 0 )
+			data->scrollPos = 0;
+		if( tmp != data->scrollPos )
 			rend = 1;
 	}
 	bool ret = rend;
@@ -168,65 +106,39 @@ bool VScrollBar::getRend()
 }
 
 // const 
-void VScrollBar::render( int x, int y, int br, int hö, Bild &zRObj ) const
-{
-	if( bg )
-		zRObj.alphaRegion( x, y, br, hö, bgFarbe );
-	--br;
-	--hö;
-	zRObj.drawLinieH( x, y, br + 1, farbe );
-	zRObj.drawLinieH( x, y + hö, br + 1, farbe );
-	zRObj.drawLinieV( x, y + 1, hö - 1, farbe );
-	zRObj.drawLinieV( x + br, y + 1, hö - 1, farbe );
-	zRObj.drawLinieH( x + 1, y + br, br - 1, farbe );
-	zRObj.drawLinieH( x + 1, y + hö - br, br - 1, farbe );
-	++br;
-	++hö;
-	int st = (int)( data->anzeigeBeginn / ( data->maxHöhe / ( hö - br * 2.0 ) ) );
-	int end = (int)( ( hö - 2.0 * br ) / ( (double)data->maxHöhe / data->anzeigeHöhe ) );
-	if( data->anzeigeBeginn > data->maxHöhe - data->anzeigeHöhe )
-		data->anzeigeBeginn = data->maxHöhe - data->anzeigeHöhe;
-	if( data->anzeigeBeginn < 0 )
-	{
-		data->anzeigeBeginn = 0;
-		end = hö - br * 2;
-	}
-	zRObj.füllRegion( x + 1, y + br + st, br - 1, end, farbe );
-}
-
-VScrollData *VScrollBar::getScrollData() const
+ScrollData *ScrollBar::getScrollData() const
 {
 	return data;
 }
 
-int VScrollBar::getKlickScroll() const
+int ScrollBar::getKlickScroll() const
 {
 	return klickScroll;
 }
 
-int VScrollBar::getFarbe() const
+int ScrollBar::getFarbe() const
 {
 	return farbe;
 }
 
-int VScrollBar::getBgFarbe() const
+int ScrollBar::getBgFarbe() const
 {
 	return bg ? bgFarbe : 0;
 }
 
-int VScrollBar::getScroll() const
+int ScrollBar::getScroll() const
 {
-    return data->anzeigeBeginn;
+    return data->scrollPos;
 }
 
 // Reference Counting
-VScrollBar *VScrollBar::getThis()
+ScrollBar *ScrollBar::getThis()
 {
 	++ref;
 	return this;
 }
 
-VScrollBar *VScrollBar::release()
+ScrollBar *ScrollBar::release()
 {
 	--ref;
 	if( ref == 0 )
@@ -234,78 +146,116 @@ VScrollBar *VScrollBar::release()
 	return 0;
 }
 
-// Inhalt der HScrollBar Klasse aus Scroll.h
-// Konstruktor 
-HScrollBar::HScrollBar()
-	: data( new HScrollData() ),
-	  knopfdruck( 0 ),
-	  farbe( 0xFF808080),
-	  bgFarbe( 0 ),
-	  bg( 0 ),
-	  klickScroll( 10 ),
-	  mx( -1 ),
-	  my( -1 ),
-	  mp( 0 ),
-	  rend( 0 ),
-	  ref( 1 )
-{
-}
-
-// Destruktor 
-HScrollBar::~HScrollBar()
-{
-	delete data;
-}
-
-// nicht constant
-void HScrollBar::setFarbe( int fc )
+// Inhalt der VScrollBar Klasse
+VScrollBar::VScrollBar()
+    : ScrollBar()
 {
-	farbe = fc;
-	rend = 1;
 }
 
-void HScrollBar::setBgFarbe( int fc, bool bgF )
-{
-	bgFarbe = fc;
-	bg = bgF;
-	rend = 1;
-}
-
-void HScrollBar::update( int maxBreite, int anzeigeBreite )
+bool VScrollBar::doMausMessage( int x, int y, int br, int hö, MausEreignis &me )
 {
-	if( data->maxBreite != maxBreite || data->anzeigeBreite != anzeigeBreite )
-	{
-		data->maxBreite = maxBreite, data->anzeigeBreite = anzeigeBreite;
-		rend = 1;
-	}
-	if( data->anzeigeBeginn > data->maxBreite - data->anzeigeBreite && data->maxBreite - data->anzeigeBreite >= 0 )
-	{
-		data->anzeigeBeginn = data->maxBreite - data->anzeigeBreite;
-		rend = 1;
-	}
-	if( data->anzeigeBeginn < 0 )
-	{
-		data->anzeigeBeginn = 0;
-		rend = 1;
-	}
+    bool ret = me.mx >= x && me.mx <= x + br && me.my >= y && me.my <= y + hö;
+    knopfdruck = 0;
+    if( me.verarbeitet )
+    {
+        mx = -1, my = -1;
+        mp = 0;
+        return ret;
+    }
+    if( me.id == ME_UScroll )
+    {
+        data->scrollPos -= klickScroll;
+        if( data->scrollPos < 0 )
+            data->scrollPos = 0;
+        rend = 1;
+        return ret;
+    }
+    if( me.id == ME_DScroll )
+    {
+        data->scrollPos += klickScroll;
+        if( data->scrollPos > data->max - data->anzeige )
+            data->scrollPos = data->max - data->anzeige;
+        if( data->scrollPos < 0 )
+            data->scrollPos = 0;
+        rend = 1;
+        return ret;
+    }
+    if( ret )
+        mx = me.mx - x, my = me.my - y;
+    else
+        mx = -1, my = -1;
+    if( me.id == ME_PLinks )
+        mp = 1;
+    if( me.id == ME_RLinks )
+        mp = 0;
+    if( mp )
+    {
+        if( mx >= 0 && my >= 0 )
+        {
+            if( my < br )
+            {
+                knopfdruck = 1;
+                data->scrollPos -= klickScroll;
+            }
+            else if( my > hö - br )
+            {
+                knopfdruck = 2;
+                data->scrollPos += klickScroll;
+            }
+            else
+                data->scrollPos = (int)( ( data->max / ( hö - 2.0 * br ) ) * ( my - br ) ) - data->anzeige / 2;
+            if( data->scrollPos > data->max - data->anzeige )
+                data->scrollPos = data->max - data->anzeige;
+            if( data->scrollPos < 0 )
+                data->scrollPos = 0;
+            rend = 1;
+        }
+    }
+    return ret;
 }
 
-void HScrollBar::setKlickScroll( int ks )
+void VScrollBar::render( int x, int y, int br, int hö, Bild &zRObj ) const
 {
-	klickScroll = ks;
-	rend = 1;
+    if( bg )
+        zRObj.alphaRegion( x, y, br, hö, bgFarbe );
+    --br;
+    --hö;
+    zRObj.drawLinieH( x, y, br + 1, farbe );
+    zRObj.drawLinieH( x, y + hö, br + 1, farbe );
+    zRObj.drawLinieV( x, y + 1, hö - 1, farbe );
+    zRObj.drawLinieV( x + br, y + 1, hö - 1, farbe );
+    zRObj.drawLinieH( x + 1, y + br, br - 1, farbe );
+    zRObj.drawLinieH( x + 1, y + hö - br, br - 1, farbe );
+    ++br;
+    ++hö;
+    int st = (int)( data->scrollPos / ( data->max / ( hö - br * 2.0 ) ) );
+    int end = (int)( ( hö - 2.0 * br ) / ( (double)data->max / data->anzeige ) );
+    if( data->scrollPos > data->max - data->anzeige )
+        data->scrollPos = data->max - data->anzeige;
+    if( data->scrollPos < 0 )
+    {
+        data->scrollPos = 0;
+        end = hö - br * 2;
+    }
+    zRObj.füllRegion( x + 1, y + br + st, br - 1, end, farbe );
+}
+
+ScrollBar *VScrollBar::release()
+{
+    --ref;
+    if( ref == 0 )
+        delete this;
+    return 0;
 }
 
-void HScrollBar::scroll( int breite )
+// Inhalt der HScrollBar Klasse aus Scroll.h
+// Konstruktor 
+HScrollBar::HScrollBar()
+	: ScrollBar()
 {
-	data->anzeigeBeginn = breite;
-	if( data->anzeigeBeginn > data->maxBreite - data->anzeigeBreite )
-		data->anzeigeBeginn = data->maxBreite - data->anzeigeBreite;
-	if( data->anzeigeBeginn < 0 )
-		data->anzeigeBeginn = 0;
-	rend = 1;
 }
 
+// nicht constant
 bool HScrollBar::doMausMessage( int x, int y, int br, int hö, MausEreignis &me )
 {
     bool ret = me.mx >= x && me.mx <= x + br && me.my >= y && me.my <= y + hö;
@@ -318,19 +268,19 @@ bool HScrollBar::doMausMessage( int x, int y, int br, int h
 	}
 	if( me.id == ME_LScroll )
 	{
-		data->anzeigeBeginn -= klickScroll;
-		if( data->anzeigeBeginn < 0 )
-			data->anzeigeBeginn = 0;
+		data->scrollPos -= klickScroll;
+		if( data->scrollPos < 0 )
+			data->scrollPos = 0;
 		rend = 1;
 		return ret;
 	}
 	if( me.id == ME_RScroll )
 	{
-		data->anzeigeBeginn += klickScroll;
-		if( data->anzeigeBeginn > data->maxBreite - data->anzeigeBreite )
-			data->anzeigeBeginn = data->maxBreite - data->anzeigeBreite;
-		if( data->anzeigeBeginn < 0 )
-			data->anzeigeBeginn = 0;
+		data->scrollPos += klickScroll;
+		if( data->scrollPos > data->max - data->anzeige )
+			data->scrollPos = data->max - data->anzeige;
+		if( data->scrollPos < 0 )
+			data->scrollPos = 0;
 		rend = 1;
 		return ret;
 	}
@@ -349,55 +299,25 @@ bool HScrollBar::doMausMessage( int x, int y, int br, int h
 			if( mx < hö )
 			{
 				knopfdruck = 1;
-				data->anzeigeBeginn -= klickScroll;
+				data->scrollPos -= klickScroll;
 			}
 			else if( mx > br - hö )
 			{
 				knopfdruck = 2;
-				data->anzeigeBeginn += klickScroll;
+				data->scrollPos += klickScroll;
 			}
 			else
-				data->anzeigeBeginn = (int)( ( data->maxBreite / ( br - 2.0 * hö ) ) * ( mx - hö ) ) - data->anzeigeBreite / 2;
-			if( data->anzeigeBeginn > data->maxBreite - data->anzeigeBreite )
-				data->anzeigeBeginn = data->maxBreite - data->anzeigeBreite;
-			if( data->anzeigeBeginn < 0 )
-				data->anzeigeBeginn = 0;
+				data->scrollPos = (int)( ( data->max / ( br - 2.0 * hö ) ) * ( mx - hö ) ) - data->anzeige / 2;
+			if( data->scrollPos > data->max - data->anzeige )
+				data->scrollPos = data->max - data->anzeige;
+			if( data->scrollPos < 0 )
+				data->scrollPos = 0;
 			rend = 1;
 		}
 	}
     return ret;
 }
 
-bool HScrollBar::getRend()
-{
-	if( knopfdruck == 1 )
-	{
-		int tmp = data->anzeigeBeginn;
-		data->anzeigeBeginn -= klickScroll;
-		if( data->anzeigeBeginn > data->maxBreite - data->anzeigeBreite )
-			data->anzeigeBeginn = data->maxBreite - data->anzeigeBreite;
-		if( data->anzeigeBeginn < 0 )
-			data->anzeigeBeginn = 0;
-		if( tmp != data->anzeigeBeginn )
-			rend = 1;
-	}
-	if( knopfdruck == 2 )
-	{
-		int tmp = data->anzeigeBeginn;
-		data->anzeigeBeginn += klickScroll;
-		if( data->anzeigeBeginn > data->maxBreite - data->anzeigeBreite )
-			data->anzeigeBeginn = data->maxBreite - data->anzeigeBreite;
-		if( data->anzeigeBeginn < 0 )
-			data->anzeigeBeginn = 0;
-		if( tmp != data->anzeigeBeginn )
-			rend = 1;
-	}
-	bool ret = rend;
-	rend = 0;
-	return ret;
-}
-
-// const 
 void HScrollBar::render( int x, int y, int br, int hö, Bild &zRObj ) const
 {
 	if( bg )
@@ -412,51 +332,19 @@ void HScrollBar::render( int x, int y, int br, int h
 	zRObj.drawLinieV( x + br - hö, y + 1, hö - 1, farbe );
 	++br;
 	++hö;
-	int st = (int)( data->anzeigeBeginn / ( data->maxBreite / ( br - hö * 2.0 ) ) );
-	int end = (int)( ( br - 2.0 * hö ) / ( (double)data->maxBreite / data->anzeigeBreite ) );
-	if( data->anzeigeBeginn > data->maxBreite - data->anzeigeBreite )
-		data->anzeigeBeginn = data->maxBreite - data->anzeigeBreite;
-	if( data->anzeigeBeginn < 0 )
+	int st = (int)( data->scrollPos / ( data->max / ( br - hö * 2.0 ) ) );
+	int end = (int)( ( br - 2.0 * hö ) / ( (double)data->max / data->anzeige ) );
+	if( data->scrollPos > data->max - data->anzeige )
+		data->scrollPos = data->max - data->anzeige;
+	if( data->scrollPos < 0 )
 	{
-		data->anzeigeBeginn = 0;
+		data->scrollPos = 0;
 		end = br - hö * 2;
 	}
 	zRObj.füllRegion( x + hö + st, y + 1, end, hö - 1, farbe );
 }
 
-HScrollData *HScrollBar::getScrollData() const
-{
-	return data;
-}
-
-int HScrollBar::getKlickScroll() const
-{
-	return klickScroll;
-}
-
-int HScrollBar::getFarbe() const
-{
-	return farbe;
-}
-
-int HScrollBar::getBgFarbe() const
-{
-	return bg ? bgFarbe : 0;
-}
-
-int HScrollBar::getScroll() const
-{
-    return data->anzeigeBeginn;
-}
-
-// Reference Counting
-HScrollBar *HScrollBar::getThis()
-{
-	++ref;
-	return this;
-}
-
-HScrollBar *HScrollBar::release()
+ScrollBar *HScrollBar::release()
 {
 	--ref;
 	if( ref == 0 )

+ 114 - 82
Scroll.h

@@ -7,101 +7,133 @@ namespace Framework
 {
 	class Bild; // Bild.h
 	struct MausEreignis; // MausEreignis.h
-	struct VScrollData; // aus dieser Datei
-	struct HScrollData; // aus dieser Datei
-	class VScrollBar; // aus dieser Datei
-	class HScrollBar; // aus dieser Datei
 
-	struct VScrollData
-	{
-		int anzeigeHöhe;
-		int maxHöhe;
-		int anzeigeBeginn;
-	};
+    struct ScrollData
+    {
+        int anzeige;
+        int max;
+        int scrollPos;
+    };
 
-	struct HScrollData
-	{
-		int anzeigeBreite;
-		int maxBreite;
-		int anzeigeBeginn;
-	};
+    // Die Baseklasse vür die Horizontale und Vertikale Scrollbar
+    class ScrollBar
+    {
+    protected:
+        ScrollData *data;
+        int knopfdruck;
+        int farbe;
+        int bgFarbe;
+        bool bg;
+        int klickScroll;
+        int mx, my;
+        bool mp;
+        bool rend;
+        int ref;
 
-	class VScrollBar
-	{
-	private:
-		VScrollData *data;
-		int knopfdruck;
-		int farbe;
-		int bgFarbe;
-		bool bg;
-		int klickScroll;
-		int mx, my;
-		bool mp;
-		bool rend;
-		int ref;
+    public:
+        // Konstruktor 
+        __declspec( dllexport ) ScrollBar();
+        // Destruktor 
+        __declspec( dllexport ) ~ScrollBar();
+        // Setzt die Fordergrundfarbe der Scrollbar
+        //  fc: Die Farbe in A8R8G8B8 Format
+        __declspec( dllexport ) void setFarbe( int fc );
+        // Setzt die Hintergrundfarbe der Scrollbar
+        //  fc: Die Farbe in A8R8G8B8 Format
+        //  bgF: 1, fals ein Hintergrund gezeichnet werden soll
+        __declspec( dllexport ) void setBgFarbe( int fc, bool bgF );
+        // Aktualisiert die Scrollbar
+        //  maxGr: Die Maximale Größe des Fensters in Pixeln
+        //  anzeigeGr: Die angezeigte Größe des Fensters in Pixeln
+        __declspec( dllexport ) void update( int maxGr, int anzeigeGr );
+        // Setzt die Scroll geschwindigkeit
+        //  klickScroll: Die anzahl an Pixeln, die pro Klick gescrollt werden
+        __declspec( dllexport ) void setKlickScroll( int klickScroll );
+        // Scrollt zu einer bestimmten Position
+        //  pos: Die Position in Pixeln im Fenster, ab der gezeichnet werden soll
+        __declspec( dllexport ) void scroll( int pos );
+        // Verarbeitet ein Maus Ereignis
+        //  x: Die X Position der Scroll Bar im Fenster
+        //  y: Die Y Position der Scroll Bar im Fenster
+        //  br: Die Breite der Scroll Bar
+        //  hö: Die Höhe der Scroll Bar
+        //  return: 1, falls die Nachricht verarbeitet wurde. Setzt dafür nicht den verarbeitet flag des Maus Ereignisses
+        __declspec( dllexport ) virtual bool doMausMessage( int x, int y, int br, int hö, MausEreignis &me ) = 0;
+        // Gibt zurück, ob sich die Scrollbar seit dem letzten Aufruf der Funktion verändert hat
+        __declspec( dllexport ) bool getRend();
+        // Zeichnet die Scrollbar
+        //  x: Die X Position der Scroll Bar
+        //  y: Die Y Position der Scroll Bar
+        //  br: Die Breite der Scroll Bar
+        //  hö: Die Höhe der Scroll Bar
+        //  zRObj: Das Bild, in das gezeichnet werden soll
+        __declspec( dllexport ) virtual void render( int x, int y, int br, int hö, Bild &zRObj ) const = 0;
+        // Gibt einen zeiger auf die Scroll Daten zurück
+        __declspec( dllexport ) ScrollData *getScrollData() const;
+        // Gibt die Scroll geschwindigkeit zurück. Die Anzahl der gescrollten Pixel pro Klick
+        __declspec( dllexport ) int getKlickScroll() const;
+        // Gibt die Fordergrundfarbe der Scrollbar zurück
+        __declspec( dllexport ) int getFarbe() const;
+        // Gibt die Hintergrundfarbe der Scrollbar zurück
+        __declspec( dllexport ) int getBgFarbe() const;
+        // Gibt die aktuelle Scroll Position zurück
+        __declspec( dllexport ) int getScroll() const;
+        // Erhöht den Reference Counting Zähler.
+        //  return: this.
+        __declspec( dllexport ) ScrollBar *getThis();
+        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
+        //  return: 0.
+        __declspec( dllexport ) virtual ScrollBar *release();
+    };
 
+    // Eine vertikale Scrollbar, wie sie in manchen 2D GUI Zeichnungen des Frameworks verwendet wird
+	class VScrollBar : public ScrollBar
+	{
 	public:
 		// Konstruktor 
 		__declspec( dllexport ) VScrollBar();
-		// Destruktor 
-		__declspec( dllexport ) ~VScrollBar();
-		// nicht constant
-		__declspec( dllexport ) void setFarbe( int fc );
-		__declspec( dllexport ) void setBgFarbe( int fc, bool bgF );
-		__declspec( dllexport ) void update( int maxHöhe, int anzeigeHöhe );
-		__declspec( dllexport ) void setKlickScroll( int klickScroll );
-		__declspec( dllexport ) void scroll( int höhe );
-		__declspec( dllexport ) bool doMausMessage( int x, int y, int br, int hö, MausEreignis &me );
-		__declspec( dllexport ) bool getRend();
-		// constant 
-		__declspec( dllexport ) void render( int x, int y, int br, int hö, Bild &zRObj ) const;
-		__declspec( dllexport ) VScrollData *getScrollData() const;
-		__declspec( dllexport ) int getKlickScroll() const;
-		__declspec( dllexport ) int getFarbe() const;
-		__declspec( dllexport ) int getBgFarbe() const;
-        __declspec( dllexport ) int getScroll() const;
-		// Reference Counting
-		__declspec( dllexport ) VScrollBar *getThis();
-		__declspec( dllexport ) VScrollBar *release();
+        // Verarbeitet ein Maus Ereignis
+        //  x: Die X Position der Scroll Bar im Fenster
+        //  y: Die Y Position der Scroll Bar im Fenster
+        //  br: Die Breite der Scroll Bar
+        //  hö: Die Höhe der Scroll Bar
+        //  return: 1, falls die Nachricht verarbeitet wurde. Setzt dafür nicht den verarbeitet flag des Maus Ereignisses
+		__declspec( dllexport ) bool doMausMessage( int x, int y, int br, int hö, MausEreignis &me ) override;
+        // Zeichnet die Scrollbar
+        //  x: Die X Position der Scroll Bar
+        //  y: Die Y Position der Scroll Bar
+        //  br: Die Breite der Scroll Bar
+        //  hö: Die Höhe der Scroll Bar
+        //  zRObj: Das Bild, in das gezeichnet werden soll
+		__declspec( dllexport ) void render( int x, int y, int br, int hö, Bild &zRObj ) const override;
+        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
+        //  return: 0.
+		__declspec( dllexport ) ScrollBar *release() override;
 	};
 
-	class HScrollBar
+    // Eine horizontale Scrollbar, wie sie in manchen 2D GUI Zeichnungen des Frameworks verwendet wird
+	class HScrollBar : public ScrollBar
 	{
-	private:
-		HScrollData *data;
-		int knopfdruck;
-		int farbe;
-		int bgFarbe;
-		bool bg;
-		int klickScroll;
-		int mx, my;
-		bool mp;
-		bool rend;
-		int ref;
-
 	public:
 		// Konstruktor 
 		__declspec( dllexport ) HScrollBar();
-		// Destruktor 
-		__declspec( dllexport ) ~HScrollBar();
-		// nicht constant
-		__declspec( dllexport ) void setFarbe( int fc );
-		__declspec( dllexport ) void setBgFarbe( int fc, bool bgF );
-		__declspec( dllexport ) void update( int maxBreite, int anzeigeBreite );
-		__declspec( dllexport ) void setKlickScroll( int klickScroll );
-		__declspec( dllexport ) void scroll( int breite );
-		__declspec( dllexport ) bool doMausMessage( int x, int y, int br, int hö, MausEreignis &me );
-		__declspec( dllexport ) bool getRend();
-		// constant 
-		__declspec( dllexport ) void render( int x, int y, int br, int hö, Bild &zRObj ) const;
-		__declspec( dllexport ) HScrollData *getScrollData() const;
-		__declspec( dllexport ) int getKlickScroll() const;
-		__declspec( dllexport ) int getFarbe() const;
-		__declspec( dllexport ) int getBgFarbe() const;
-        __declspec( dllexport ) int getScroll() const;
-		// Reference Counting
-		__declspec( dllexport ) HScrollBar *getThis();
-		__declspec( dllexport ) HScrollBar *release();
+        // Verarbeitet ein Maus Ereignis
+        //  x: Die X Position der Scroll Bar im Fenster
+        //  y: Die Y Position der Scroll Bar im Fenster
+        //  br: Die Breite der Scroll Bar
+        //  hö: Die Höhe der Scroll Bar
+        //  return: 1, falls die Nachricht verarbeitet wurde. Setzt dafür nicht den verarbeitet flag des Maus Ereignisses
+		__declspec( dllexport ) bool doMausMessage( int x, int y, int br, int hö, MausEreignis &me ) override;
+        // Zeichnet die Scrollbar
+        //  x: Die X Position der Scroll Bar
+        //  y: Die Y Position der Scroll Bar
+        //  br: Die Breite der Scroll Bar
+        //  hö: Die Höhe der Scroll Bar
+        //  zRObj: Das Bild, in das gezeichnet werden soll
+		__declspec( dllexport ) void render( int x, int y, int br, int hö, Bild &zRObj ) const override;
+        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
+        //  return: 0.
+		__declspec( dllexport ) ScrollBar *release() override;
 	};
 }
 

+ 3 - 0
Shader.h

@@ -20,6 +20,7 @@ namespace Framework
         PIXEL
     };
 
+    // Eine Shader Klasse, die alle Constanten Buffers eines Shaders verwaltet
     class Shader
     {
     protected:
@@ -80,6 +81,7 @@ namespace Framework
         virtual Shader *release();
     };
 
+    // Verwaltet einen Pixel Shader
     class PixelShader : public Shader
     {
     private:
@@ -104,6 +106,7 @@ namespace Framework
         Shader *release();
     };
 
+    // Verwaltet einen Vertex Shader
     class VertexShader : public Shader
     {
     private:

+ 6 - 6
Tabelle.cpp

@@ -873,8 +873,8 @@ void ObjTabelle::doMausEreignis( MausEreignis &me ) // verarbeitet Nachrichten
 		aufScroll = 1;
 	if( !außerhalb && horizontalScrollBar && hatStyle( Style::HScroll ) && me.my > pos.y + gr.y - 15 )
 		aufScroll = 1;
-	me.mx -= pos.x + ( ( horizontalScrollBar && hatStyle( Style::HScroll ) ) ? horizontalScrollBar->getScrollData()->anzeigeBeginn : 0 );
-	me.my -= pos.y + ( ( vertikalScrollBar && hatStyle( Style::VScroll ) ) ? vertikalScrollBar->getScrollData()->anzeigeBeginn : 0 );
+	me.mx -= pos.x + ( ( horizontalScrollBar && hatStyle( Style::HScroll ) ) ? horizontalScrollBar->getScroll() : 0 );
+	me.my -= pos.y + ( ( vertikalScrollBar && hatStyle( Style::VScroll ) ) ? vertikalScrollBar->getScroll() : 0 );
 	if( MakB )
 	{
 		lockZeichnung();
@@ -1054,13 +1054,13 @@ void ObjTabelle::render( Bild &zRObj ) // zeichnet nach zRObj
 	}
 	int xPos = 0;
 	if( horizontalScrollBar && hatStyle( Style::HScroll ) )
-		xPos -= horizontalScrollBar->getScrollData()->anzeigeBeginn;
+		xPos -= horizontalScrollBar->getScroll();
 	for( int s = 0; s < spaltenAnzahl; ++s )
 	{
 		int sBr = spaltenBreite->hat( s ) ? spaltenBreite->get( s ) : 0;
 		int yPos = 0;
 		if( vertikalScrollBar && hatStyle( Style::VScroll ) )
-			yPos -= vertikalScrollBar->getScrollData()->anzeigeBeginn;
+			yPos -= vertikalScrollBar->getScroll();
 		Array< Zeichnung* > *tmp_zZeichnungs = zZeichnungs->z( s );
 		if( !tmp_zZeichnungs )
 			continue;
@@ -1109,7 +1109,7 @@ void ObjTabelle::render( Bild &zRObj ) // zeichnet nach zRObj
 			}
 			yPos += zHö;
 			if( z == zeilenAnzahl - 1 && vertikalScrollBar && hatStyle( Style::VScroll ) )
-				vertikalScrollBar->getScrollData()->maxHöhe = yPos + vertikalScrollBar->getScrollData()->anzeigeBeginn;
+				vertikalScrollBar->getScrollData()->max = yPos + vertikalScrollBar->getScroll();
 		}
 		if( hatStyle( Style::Raster ) )
 		{
@@ -1119,7 +1119,7 @@ void ObjTabelle::render( Bild &zRObj ) // zeichnet nach zRObj
 		xPos += sBr;
 	}
 	if( horizontalScrollBar && hatStyle( Style::HScroll ) )
-        horizontalScrollBar->getScrollData()->maxBreite = xPos + horizontalScrollBar->getScrollData()->anzeigeBeginn;
+        horizontalScrollBar->getScrollData()->max = xPos + horizontalScrollBar->getScroll();
 	zRObj.releaseDrawOptions();
 	unlockZeichnung();
 }

+ 349 - 54
Tabelle.h

@@ -238,115 +238,410 @@ namespace Framework
         //  spaltenName: Der Name der Spalte des Feldes
         //  zeilenName: Der Name der Zeile des Feldes
 		__declspec( dllexport ) void setAuswahl( Text *spaltenName, Text *zeilenName );
-		__declspec( dllexport ) void setRasterFarbe( int f ); // settzt die Farbe des Rasters
-		__declspec( dllexport ) void setRasterBreite( int br ); // setzt die Breite des Rasters
-		__declspec( dllexport ) void setARahmenZ( LRahmen *ram ); // setzt den auswahl Rahmen
-		__declspec( dllexport ) void setARFarbe( int f ); // setzt die auswahl Rahmen Farbe
-		__declspec( dllexport ) void setARBreite( int br ); // setzt die auswahl Rahmen Breite
-		__declspec( dllexport ) void setAAlphaFeldZ( AlphaFeld *af ); // setzt das auswahl AlphaFeld
-		__declspec( dllexport ) void setAAfFarbe( int f ); // setzt die Farbe des auswahl AlphaFeldes
-		__declspec( dllexport ) void setAAfStärke( int st ); // setzt die Stärke des auswahl AlphaFeldes
-		__declspec( dllexport ) void setARahmenZ( int sNum, int zNum, LRahmen *ram ); // setzt den auswahl Rahmen
+        // Setzt dei Farbe des zwischen den Kästchen angezeigten Rasters
+        //  f: Die Farbe im A8R8G8B8 Format
+		__declspec( dllexport ) void setRasterFarbe( int f );
+        // Setzt due Breite des zwischen den Kästchen angezeigten Raseter
+        //  br: Die Breite in Pixeln
+		__declspec( dllexport ) void setRasterBreite( int br );
+        // Setzte den Zeiger auf einen Rahmen, der um das ausgewählte Kästchen gezeichnet wird
+        //  ram: Der Rahmen
+		__declspec( dllexport ) void setARahmenZ( LRahmen *ram );
+        // Setzt die farbe des Rahmens, der um das ausgewählte Kästchen gezeichnet wird
+        //  f: Die Farbe im A8R8G8B8 Format
+		__declspec( dllexport ) void setARFarbe( int f ); 
+        // Setzt die Breite des Rahmens, der um das ausgewählte Kästchen gezeichnet wird
+        //  br: Die Breite in Pixeln
+		__declspec( dllexport ) void setARBreite( int br );
+        // Setzt einen Zeiger auf das AlphaFeld, das für das ausgewählte Kästchen verwendet wird
+        //  af: Das AlphaFeld
+		__declspec( dllexport ) void setAAlphaFeldZ( AlphaFeld *af );
+        // Setzt die Farbe des AlphaFeldes, das für das ausgewählte Kästchen verwendet wird
+        //  f: Die Farbe im A8R8G8B8 Format
+		__declspec( dllexport ) void setAAfFarbe( int f );
+        // Setzt die Stärke des AlphaFeldes, das für das ausgewählte Kästchen verwendet wird
+        //  st: Die Stärke
+		__declspec( dllexport ) void setAAfStärke( int st );
+        // Setzt einen Zeiger auf einen Rahmen, der bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte wird
+        //  sNum: Der Index der Spalte des Kästchens
+        //  zNum: Der Index der Zeile des Kästchens
+        //  ram: Der Rahmen
+		__declspec( dllexport ) void setARahmenZ( int sNum, int zNum, LRahmen *ram );
+        // Setzt einen Zeiger auf einen Rahmen, der bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte wird
+        //  spaltenName: Der Name der Spalte des Kästchens
+        //  zeilenName: Der Name der Zeile des Kästchens
+        //  ram: Der Rahmen
 		__declspec( dllexport ) void setARahmenZ( const char *spaltenName, const char *zeilenName, LRahmen *ram );
+        // Setzt einen Zeiger auf einen Rahmen, der bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte wird
+        //  spaltenName: Der Name der Spalte des Kästchens
+        //  zeilenName: Der Name der Zeile des Kästchens
+        //  ram: Der Rahmen
 		__declspec( dllexport ) void setARahmenZ( Text *spaltenName, Text *zeilenName, LRahmen *ram );
-		__declspec( dllexport ) void setARFarbe( int sNum, int zNum, int f ); // setzt die auswahl Rahmen Farbe
+        // Setzt die Farbe von einem Rahmen, der bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte wird
+        //  sNum: Der Index der Spalte des Kästchens
+        //  zNum: Der Index der Zeile des Kästchens
+        //  f: Die Farbe im A8R8G8B8 Format
+		__declspec( dllexport ) void setARFarbe( int sNum, int zNum, int f );
+        // Setzt die Farbe von einem Rahmen, der bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte wird
+        //  spaltenName: Der Name der Spalte des Kästchens
+        //  zeilenName: Der Name der Zeile des Kästchens
+        //  f: Die Farbe im A8R8G8B8 Format
 		__declspec( dllexport ) void setARFarbe( const char *spaltenName, const char *zeilenName, int f );
+        // Setzt die Farbe von einem Rahmen, der bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte wird
+        //  spaltenName: Der Name der Spalte des Kästchens
+        //  zeilenName: Der Name der Zeile des Kästchens
+        //  f: Die Farbe im A8R8G8B8 Format
 		__declspec( dllexport ) void setARFarbe( Text *spaltenName, Text *zeilenName, int f );
-		__declspec( dllexport ) void setARBreite( int sNum, int zNum, int br ); // setzt die auswahl Rahmen Breite
+        // Setzt die Breite von einem Rahmen, der bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte wird
+        //  sNum: Der Index der Spalte des Kästchens
+        //  zNum: Der Index der Zeile des Kästchens
+        //  br: Die Breite in Pixeln
+		__declspec( dllexport ) void setARBreite( int sNum, int zNum, int br );
+        // Setzt die Breite von einem Rahmen, der bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte wird
+        //  spaltenName: Der Name der Spalte des Kästchens
+        //  zeilenName: Der Name der Zeile des Kästchens
+        //  br: Die Breite in Pixeln
 		__declspec( dllexport ) void setARBreite( const char *spaltenName, const char *zeilenName, int br );
+        // Setzt die Breite von einem Rahmen, der bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte wird
+        //  spaltenName: Der Name der Spalte des Kästchens
+        //  zeilenName: Der Name der Zeile des Kästchens
+        //  br: Die Breite in Pixeln
 		__declspec( dllexport ) void setARBreite( Text *spaltenName, Text *zeilenName, int br );
-		__declspec( dllexport ) void setAAlphaFeldZ( int sNum, int zNum, AlphaFeld *af ); // setzt das auswahl AlphaFeld
+        // Setzt den Farbüergang, der bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte wird
+        //  sNum: Der Index der Spalte des Kästchens
+        //  zNum: Der Index der Zeile des Kästchens
+        //  af: Der Farbübergang
+		__declspec( dllexport ) void setAAlphaFeldZ( int sNum, int zNum, AlphaFeld *af );
+        // Setzt den Farbüergang, der bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte wird
+        //  spaltenName: Der Name der Spalte des Kästchens
+        //  zeilenName: Der Name der Zeile des Kästchens
+        //  af: Der Farbübergang
 		__declspec( dllexport ) void setAAlphaFeldZ( const char *spaltenName, const char *zeilenName, AlphaFeld *af );
+        // Setzt den Farbüergang, der bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte wird
+        //  spaltenName: Der Name der Spalte des Kästchens
+        //  zeilenName: Der Name der Zeile des Kästchens
+        //  af: Der Farbübergang
 		__declspec( dllexport ) void setAAlphaFeldZ( Text *spaltenName, Text *zeilenName, AlphaFeld *af );
-		__declspec( dllexport ) void setAAfFarbe( int sNum, int zNum, int f ); // setzt die Farbe des auswahl AlphaFeldes
+        // Setzt die Farbe des Farbüergangs, der bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte wird
+        //  sNum: Der Index der Spalte des Kästchens
+        //  zNum: Der Index der Zeile des Kästchens
+        //  f: Die Farbe im A8R8G8B8 Format
+		__declspec( dllexport ) void setAAfFarbe( int sNum, int zNum, int f );
+        // Setzt die Farbe des Farbüergangs, der bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte wird
+        //  spaltenName: Der Name der Spalte des Kästchens
+        //  zeilenName: Der Name der Zeile des Kästchens
+        //  f: Die Farbe im A8R8G8B8 Format
 		__declspec( dllexport ) void setAAfFarbe( const char *spaltenName, const char *zeilenName, int f );
+        // Setzt die Farbe des Farbüergangs, der bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte wird
+        //  spaltenName: Der Name der Spalte des Kästchens
+        //  zeilenName: Der Name der Zeile des Kästchens
+        //  f: Die Farbe im A8R8G8B8 Format
 		__declspec( dllexport ) void setAAfFarbe( Text *spaltenName, Text *zeilenName, int f );
-		__declspec( dllexport ) void setAAfStärke( int sNum, int zNum, int st ); // setzt die Stärke des auswahl AlphaFeldes
+        // Setzt die Stärke des Farbüergangs, der bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte wird
+        //  sNum: Der Index der Spalte des Kästchens
+        //  zNum: Der Index der Zeile des Kästchens
+        //  st: Die Stärke
+		__declspec( dllexport ) void setAAfStärke( int sNum, int zNum, int st );
+        // Setzt die Stärke des Farbüergangs, der bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte wird
+        //  spaltenName: Der Name der Spalte des Kästchens
+        //  zeilenName: Der Name der Zeile des Kästchens
+        //  st: Die Stärke
 		__declspec( dllexport ) void setAAfStärke( const char *spaltenName, const char *zeilenName, int st );
+        // Setzt die Stärke des Farbüergangs, der bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte wird
+        //  spaltenName: Der Name der Spalte des Kästchens
+        //  zeilenName: Der Name der Zeile des Kästchens
+        //  st: Die Stärke
 		__declspec( dllexport ) void setAAfStärke( Text *spaltenName, Text *zeilenName, int st );
-		__declspec( dllexport ) void addMsStyle( int sNum, int zNum, __int64 style ); // setzt den Style wenn Multistyled
+        // Fügt Styles hinzu, die bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte werden
+        //  sNum: Der Index der Spalte des Kästchens
+        //  zNum: Der Index der Zeile des Kästchens
+        //  style: der Style, der hinzugefügt werden soll
+		__declspec( dllexport ) void addMsStyle( int sNum, int zNum, __int64 style );
+        // Fügt Styles hinzu, die bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte werden
+        //  spaltenName: Der Name der Spalte des Kästchens
+        //  zeilenName: Der Name der Zeile des Kästchens
+        //  style: der Style, der hinzugefügt werden soll
 		__declspec( dllexport ) void addMsStyle( const char *spaltenName, const char *zeilenName, __int64 style );
+        // Fügt Styles hinzu, die bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte werden
+        //  spaltenName: Der Name der Spalte des Kästchens
+        //  zeilenName: Der Name der Zeile des Kästchens
+        //  style: der Style, der hinzugefügt werden soll
 		__declspec( dllexport ) void addMsStyle( Text *spaltenName, Text *zeilenName, __int64 style );
+        // Setzt die Styles, die bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte werden
+        //  sNum: Der Index der Spalte des Kästchens
+        //  zNum: Der Index der Zeile des Kästchens
+        //  style: der Style, der verwendet werden soll
 		__declspec( dllexport ) void setMsStyle( int sNum, int zNum, __int64 style );
+        // Setzt die Styles, die bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte werden
+        //  spaltenName: Der Name der Spalte des Kästchens
+        //  zeilenName: Der Name der Zeile des Kästchens
+        //  style: der Style, der verwendet werden soll
 		__declspec( dllexport ) void setMsStyle( const char *spaltenName, const char *zeilenName, __int64 style );
+        // Setzt die Styles, die bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte werden
+        //  spaltenName: Der Name der Spalte des Kästchens
+        //  zeilenName: Der Name der Zeile des Kästchens
+        //  style: der Style, der verwendet werden soll
 		__declspec( dllexport ) void setMsStyle( Text *spaltenName, Text *zeilenName, __int64 style );
+        // Setzt die Styles, die bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte werden
+        //  sNum: Der Index der Spalte des Kästchens
+        //  zNum: Der Index der Zeile des Kästchens
+        //  style: der Style, der verwendet werden soll
+        //  add_remove: 1, falls die übergebenen Styles hinzugefügt werden sollen. 0, fals sie entfernt werden sollen
 		__declspec( dllexport ) void setMsStyle( int sNum, int zNum, __int64 style, bool add_remove );
+        // Setzt die Styles, die bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte werden
+        //  spaltenName: Der Name der Spalte des Kästchens
+        //  zeilenName: Der Name der Zeile des Kästchens
+        //  style: der Style, der verwendet werden soll
+        //  add_remove: 1, falls die übergebenen Styles hinzugefügt werden sollen. 0, fals sie entfernt werden sollen
 		__declspec( dllexport ) void setMsStyle( const char *spaltenName, const char *zeilenName, __int64 style, bool add_remove );
+        // Setzt die Styles, die bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte werden
+        //  spaltenName: Der Name der Spalte des Kästchens
+        //  zeilenName: Der Name der Zeile des Kästchens
+        //  style: der Style, der verwendet werden soll
+        //  add_remove: 1, falls die übergebenen Styles hinzugefügt werden sollen. 0, fals sie entfernt werden sollen
 		__declspec( dllexport ) void setMsStyle( Text *spaltenName, Text *zeilenName, __int64 style, bool add_remove );
+        // Entfernt Styles von den Styles, die bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte werden
+        //  sNum: Der Index der Spalte des Kästchens
+        //  zNum: Der Index der Zeile des Kästchens
+        //  style: der Style, der entfernt werden soll
 		__declspec( dllexport ) void löscheMsStyle( int sNum, int zNum, __int64 style );
+        // Entfernt Styles von den Styles, die bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte werden
+        //  spaltenName: Der Name der Spalte des Kästchens
+        //  zeilenName: Der Name der Zeile des Kästchens
+        //  style: der Style, der entfernt werden soll
 		__declspec( dllexport ) void löscheMsStyle( const char *spaltenName, const char *zeilenName, __int64 style );
+        // Entfernt Styles von den Styles, die bei dem Flag AuswahlMultistyled bei der Auswahl eines bestimmten Kästchens verwendte werden
+        //  spaltenName: Der Name der Spalte des Kästchens
+        //  zeilenName: Der Name der Zeile des Kästchens
+        //  style: der Style, der entfernt werden soll
 		__declspec( dllexport ) void löscheMsStyle( Text *spaltenName, Text *zeilenName, __int64 style );
-		__declspec( dllexport ) bool tick( double tickVal ) override; // tick Message
-		__declspec( dllexport ) void doMausEreignis( MausEreignis &me ) override; // verarbeitet Nachrichten
+        // Aktualisiert das Objekt. Wird vom Framework aufgerufen
+        //  tickVal: Die Zeit in sekunden, die seit dem lezten Aufruf dieser Funktion vergangen ist
+        //  return: 1, wenn sich etwas verändert hat und das Bild neu gezeichnet werden muss. 0 sonst
+        __declspec( dllexport ) bool tick( double tickVal ) override;
+        // Verarbeitet Maus Nachrichten
+        //  me: Das Ereignis, was durch die Mauseingabe ausgelößt wurde
+		__declspec( dllexport ) void doMausEreignis( MausEreignis &me ) override;
+        // Verarbeitet Tastatur Nachrichten
+        //  me: Das Ereignis, was durch die Tastatureingabe ausgelößt wurde
 		__declspec( dllexport ) void doTastaturEreignis( TastaturEreignis &te ) override;
-		__declspec( dllexport ) void render( Bild &zRObj ) override; // zeichnet nach zRObj
-		// constant 
-		__declspec( dllexport ) int getSpaltenAnzahl() const; // gibt die Anzahl der Spalten zurück
-		__declspec( dllexport ) int getZeilenAnzahl() const; // gibt die Anzahl der Zeilen zurück
-		__declspec( dllexport ) int getSpaltenNummer( const char *name ) const; // gibt die Nummer der Spalte mit dem Namen name zurück
+        // Zeichnet das Objekt nach zRObj, falls er sichtbar ist
+        //  zRObj: Das Bild, in welches gezeichnet werden soll
+		__declspec( dllexport ) void render( Bild &zRObj ) override;
+		// Gibt die Anzahl der Spalten zurück
+		__declspec( dllexport ) int getSpaltenAnzahl() const;
+        // Gibt die Anzahl der Zeilen zurück
+		__declspec( dllexport ) int getZeilenAnzahl() const;
+        // Gibt den Index einer Spalte zurück
+        //  name: Der Name der Spalte
+		__declspec( dllexport ) int getSpaltenNummer( const char *name ) const;
+        // Gibt den Index einer Spalte zurück
+        //  name: Der Name der Spalte
 		__declspec( dllexport ) int getSpaltenNummer( Text *name ) const;
-		__declspec( dllexport ) Text *getSpaltenName( int num ) const; // gibt den Namen der Spalte mit Nummer num zurück
+        // Gibt den Namen einer Spalte zurück
+        //  num: Der Index der Splate
+		__declspec( dllexport ) Text *getSpaltenName( int num ) const;
+        // Gibt den Namen einer Spalte ohne erhöhten reference Counter zurück
+        //  num: Der Index der Splate
 		__declspec( dllexport ) Text *zSpaltenName( int num ) const;
-		__declspec( dllexport ) int getZeilenNummer( const char *name ) const; // gibt die Nummer der Zeile mit dem Namen name zurück
+        // Gibt den Index einer Zeile zurück
+        //  name: Der Name der Zeile
+		__declspec( dllexport ) int getZeilenNummer( const char *name ) const;
+        // Gibt den Index einer Zeile zurück
+        //  name: Der Name der Zeile
 		__declspec( dllexport ) int getZeilenNummer( Text *name ) const;
-		__declspec( dllexport ) Text *getZeilenName( int num ) const; // gibt den Namen der Zeile mit Nummer num zurück
+        // Gibt den Namen einer Zeile zurück
+        //  num: Der Index der Zeile
+		__declspec( dllexport ) Text *getZeilenName( int num ) const;
+        // Gibt den Namen einer Zeile ohne erhöhten Reference Counter zurück
+        //  num: Der Index der Zeile
 		__declspec( dllexport ) Text *zZeilenName( int num ) const;
-		__declspec( dllexport ) Punkt getZeichnungPosition( Zeichnung *zObj ) const; // gibt die Position eines Zeichnungs zurück
-		__declspec( dllexport ) Zeichnung *zZeichnung( int sNum, int zNum ) const; // gibt das Zeichnung auf der Position zurück
+        // Sucht eine Zeichnung in der Tabelle und gibt den Index der Spalte als x und den der Zeile als y zurück. (-1, -1) falls das Objekt nicht gefunden wurde
+        //  zObj: Die Zeichnung
+		__declspec( dllexport ) Punkt getZeichnungPosition( Zeichnung *zObj ) const;
+        // Gibt die Zeichnung zurück, die in einem bestimmten Kästchen der Tabelle ist
+        //  sNum: Der Index der Spalte
+        //  zNum: Der Index der Zeile
+		__declspec( dllexport ) Zeichnung *zZeichnung( int sNum, int zNum ) const;
+        // Gibt die Zeichnung zurück, die in einem bestimmten Kästchen der Tabelle ist
+        //  spaltenName: Der Name der Spalte des Kästchens
+        //  zeilenName: Der Name der Zeile des Kästchens
 		__declspec( dllexport ) Zeichnung *zZeichnung( const char *spaltenName, const char *zeilenName ) const;
+        // Gibt die Zeichnung zurück, die in einem bestimmten Kästchen der Tabelle ist
+        //  spaltenName: Der Name der Spalte des Kästchens
+        //  zeilenName: Der Name der Zeile des Kästchens
 		__declspec( dllexport ) Zeichnung *zZeichnung( Text *spaltenName, Text *zeilenName ) const;
-		__declspec( dllexport ) int getSpaltenBreite( int num ) const; // gibt die Breite der Spalte zurück
+        // Gibt die Breite einer Spalte in Pixeln zurück
+        //  num: Der Index der Spalte
+		__declspec( dllexport ) int getSpaltenBreite( int num ) const;
+        // Gibt die Breite einer Spalte in Pixeln zurück
+        //  name: Der Name der Spalte
 		__declspec( dllexport ) int getSpaltenBreite( const char *name ) const;
+        // Gibt die Breite einer Spalte in Pixeln zurück
+        //  name: Der Name der Spalte
 		__declspec( dllexport ) int getSpaltenBreite( Text *name ) const;
-		__declspec( dllexport ) int getZeilenHöhe( int num ) const; // gibt die Höhe der Zeile zurück
+        // Gibt die Höhe einer Zeile in Pixeln zurück
+        //  num: Der Index der Zeile
+		__declspec( dllexport ) int getZeilenHöhe( int num ) const;
+        // Gibt die Höhe einer Zeile in Pixeln zurück
+        //  name: Der Name der Zeile
 		__declspec( dllexport ) int getZeilenHöhe( const char *name ) const;
+        // Gibt die Höhe einer Zeile in Pixeln zurück
+        //  name: Der Name der Zeile
 		__declspec( dllexport ) int getZeilenHöhe( Text *name ) const;
-		__declspec( dllexport ) int getMinSpaltenBreite( int num ) const; // gibt die minimale Spaltengröße zurück
+        // Gibt die minimale Spalten breite in Pixeln zurück
+        //  num: Der Index der Spalte
+		__declspec( dllexport ) int getMinSpaltenBreite( int num ) const;
+        // Gibt die minimale Spalten breite in Pixeln zurück
+        //  name: Der Name der Spalte
 		__declspec( dllexport ) int getMinSpaltenBreite( const char *name ) const;
+        // Gibt die minimale Spalten breite in Pixeln zurück
+        //  name: Der Name der Spalte
 		__declspec( dllexport ) int getMinSpaltenBreite( Text *name ) const;
-		__declspec( dllexport ) int getMaxSpaltenBreite( int num ) const; // gibt die maximale Spaltengröße zurück
+        // Gibt die maximale Spalten breite in Pixeln zurück
+        //  num: Der Index der Spalte
+		__declspec( dllexport ) int getMaxSpaltenBreite( int num ) const;
+        // Gibt die maximale Spalten breite in Pixeln zurück
+        //  name: Der Name der Spalte
 		__declspec( dllexport ) int getMaxSpaltenBreite( const char *name ) const;
+        // Gibt die maximale Spalten breite in Pixeln zurück
+        //  name: Der Name der Spalte
 		__declspec( dllexport ) int getMaxSpaltenBreite( Text *name ) const;
-		__declspec( dllexport ) int getMinZeilenHöhe( int num ) const; // gibt die minimale Zeilenhöhe zurück
+        // Gibt die minimale Zeilen Höhe in Pixeln zurück
+        //  num: Der Index der Zeile
+		__declspec( dllexport ) int getMinZeilenHöhe( int num ) const;
+        // Gibt die minimale Zeilen Höhe in Pixeln zurück
+        //  name: Der Name der Zeile
 		__declspec( dllexport ) int getMinZeilenHöhe( const char *name ) const;
+        // Gibt die minimale Zeilen Höhe in Pixeln zurück
+        //  name: Der Name der Zeile
 		__declspec( dllexport ) int getMinZeilenHöhe( Text *name ) const;
-		__declspec( dllexport ) int getMaxZeilenHöhe( int num ) const; // gibt die maximale Zeilenhöhe zurück
+        // Gibt die maximale Zeilen Höhe in Pixeln zurück
+        //  num: Der Index der Zeile
+		__declspec( dllexport ) int getMaxZeilenHöhe( int num ) const;
+        // Gibt die maximale Zeilen Höhe in Pixeln zurück
+        //  name: Der Name der Zeile
 		__declspec( dllexport ) int getMaxZeilenHöhe( const char *name ) const;
+        // Gibt die maximale Zeilen Höhe in Pixeln zurück
+        //  name: Der Name der Zeile
 		__declspec( dllexport ) int getMaxZeilenHöhe( Text *name ) const;
-		__declspec( dllexport ) double getMausSpalte( int mx ) const; // ermittelt die Spalte unter der Maus
+        // Gibt den index der Splate zurück, auf die die Maus zeigt
+        //  mx: Die x Koordinate der Mausposition basierend zum linken Rand der Tabelle in Pixeln
+		__declspec( dllexport ) double getMausSpalte( int mx ) const;
+        // Gibt den Namen der Splate zurück, auf die die Maus zeigt
+        //  mx: Die x Koordinate der Mausposition basierend zum linken Rand der Tabelle in Pixeln
 		__declspec( dllexport ) Text *getMausSpaltenName( int mx ) const;
+        // Gibt den Namen der Splate ohne erhöhten Reference Counter zurück, auf die die Maus zeigt
+        //  mx: Die x Koordinate der Mausposition basierend zum linken Rand der Tabelle in Pixeln
 		__declspec( dllexport ) Text *zMausSpaltenName( int mx ) const;
-		__declspec( dllexport ) double getMausZeile( int my ) const; // ermittelt die Zeile unter der Maus
+        // Gibt den index der Zeile zurück, auf die die Maus zeigt
+        //  my: Die Y Koordinate der Mausposition basierend zum oberen Rand der Tabelle in Pixeln
+		__declspec( dllexport ) double getMausZeile( int my ) const;
+        // Gibt den Namen der Zeile zurück, auf die die Maus zeigt
+        //  my: Die Y Koordinate der Mausposition basierend zum oberen Rand der Tabelle in Pixeln
 		__declspec( dllexport ) Text *getMausZeilenName( int my ) const;
+        // Gibt den Namen der Zeile ohne erhöhten Reference Counter zurück, auf die die Maus zeigt
+        //  my: Die Y Koordinate der Mausposition basierend zum oberen Rand der Tabelle in Pixeln
 		__declspec( dllexport ) Text *zMausZeilenName( int my ) const;
-		__declspec( dllexport ) const Punkt &getAuswahlPosition() const; // gibt die Auswahl Position zurück
-		__declspec( dllexport ) int getRasterFarbe() const; // gibt die Farbe des Rasters zurück
-		__declspec( dllexport ) int getRasterBreite() const; // gibt die Breite des Rasters zurück
-		__declspec( dllexport ) LRahmen *getARahmen() const; // gibt den auswahl Rahmen zurück
+        // Gibt den Index der Spalte als x und den der Zeile als y des ausgewählten Feldes zurück
+		__declspec( dllexport ) const Punkt &getAuswahlPosition() const;
+        // Gibt die Farbe des Rasters im A8R8G8B8 Format zurück
+		__declspec( dllexport ) int getRasterFarbe() const;
+        // Gibt die Breite des Rasters in Pixeln zurück
+		__declspec( dllexport ) int getRasterBreite() const;
+        // Gibt einen Zeiger auf den Rahmen zurück, der bei dem ausgewählten Feld verwendet wird
+        __declspec( dllexport ) LRahmen *getARahmen() const;
+        // Gibt einen Zeiger auf den Rahmen ohne erhöhten Reference Counter zurück, der bei dem ausgewählten Feld verwendet wird
 		__declspec( dllexport ) LRahmen *zARahmen() const;
-		__declspec( dllexport ) AlphaFeld *getAAlphaFeld() const; // gibt das auswahl AlphaFeld zurück
+        // Gibt einen Zeiger auf den Farbübergang zurück, der bei dem ausgewählten Feld verwendet wird
+		__declspec( dllexport ) AlphaFeld *getAAlphaFeld() const;
+        // Gibt einen Zeiger auf den Farbübergang ohne erhöhten Reference Counter zurück, der bei dem ausgewählten Feld verwendet wird
 		__declspec( dllexport ) AlphaFeld *zAAlphaFeld() const;
-		__declspec( dllexport ) LRahmen *getARahmen( int sNum, int zNum ) const; // gibt den auswahl Rahmen zurück
+        // Gibt einen Zeiger auf den Rahmen zurück, der bei dem Flag AuswahlMultistyled bei der auswahl eines bestimmten Kästchens verwendet wird
+        //  sNum: Der Index der Spalte
+        //  zNum: Der Index der Zeile
+		__declspec( dllexport ) LRahmen *getARahmen( int sNum, int zNum ) const;
+        // Gibt einen Zeiger auf den Rahmen ohne erhöhten Reference Couner zurück, der bei dem Flag AuswahlMultistyled bei der auswahl eines bestimmten Kästchens verwendet wird
+        //  sNum: Der Index der Spalte
+        //  zNum: Der Index der Zeile
 		__declspec( dllexport ) LRahmen *zARahmen( int sNum, int zNum ) const;
-		__declspec( dllexport ) AlphaFeld *getAAlphaFeld( int sNum, int zNum ) const; // gibt das auswahl AlphaFeld zurück
+        // Gibt einen Zeiger auf den Farbübergang zurück, der bei dem Flag AuswahlMultistyled bei der auswahl eines bestimmten Kästchens verwendet wird
+        //  sNum: Der Index der Spalte
+        //  zNum: Der Index der Zeile
+		__declspec( dllexport ) AlphaFeld *getAAlphaFeld( int sNum, int zNum ) const;
+        // Gibt einen Zeiger auf den Farbübergang ohne erhöhten Reference Couner zurück, der bei dem Flag AuswahlMultistyled bei der auswahl eines bestimmten Kästchens verwendet wird
+        //  sNum: Der Index der Spalte
+        //  zNum: Der Index der Zeile
 		__declspec( dllexport ) AlphaFeld *zAAlphaFeld( int sNum, int zNum ) const;
-		__declspec( dllexport ) LRahmen *getARahmen( const char *spaltenName, const char *zeilenName ) const; // gibt den auswahl Rahmen zurück
+        // Gibt einen Zeiger auf den Rahmen zurück, der bei dem Flag AuswahlMultistyled bei der auswahl eines bestimmten Kästchens verwendet wird
+        //  spaltenName: Der Name der Spalte
+        //  zeilenName: Der Name der Zeile
+		__declspec( dllexport ) LRahmen *getARahmen( const char *spaltenName, const char *zeilenName ) const;
+        // Gibt einen Zeiger auf den Rahmen ohne erhöhten Reference Coune zurück, der bei dem Flag AuswahlMultistyled bei der auswahl eines bestimmten Kästchens verwendet wird
+        //  spaltenName: Der Name der Spalte
+        //  zeilenName: Der Name der Zeile
 		__declspec( dllexport ) LRahmen *zARahmen( const char *spaltenName, const char *zeilenName ) const;
-		__declspec( dllexport ) AlphaFeld *getAAlphaFeld( const char *spaltenName, const char *zeilenName ) const; // gibt das auswahl AlphaFeld zurück
+        // Gibt einen Zeiger auf den Farbübergang zurück, der bei dem Flag AuswahlMultistyled bei der auswahl eines bestimmten Kästchens verwendet wird
+        //  spaltenName: Der Name der Spalte
+        //  zeilenName: Der Name der Zeile
+		__declspec( dllexport ) AlphaFeld *getAAlphaFeld( const char *spaltenName, const char *zeilenName ) const;
+        // Gibt einen Zeiger auf den Farbübergang ohne erhöhten Reference Coune zurück, der bei dem Flag AuswahlMultistyled bei der auswahl eines bestimmten Kästchens verwendet wird
+        //  spaltenName: Der Name der Spalte
+        //  zeilenName: Der Name der Zeile
 		__declspec( dllexport ) AlphaFeld *zAAlphaFeld( const char *spaltenName, const char *zeilenName ) const;
-		__declspec( dllexport ) LRahmen *getARahmen( Text *spaltenName, Text *zeilenName ) const; // gibt den auswahl Rahmen zurück
+        // Gibt einen Zeiger auf den Rahmen zurück, der bei dem Flag AuswahlMultistyled bei der auswahl eines bestimmten Kästchens verwendet wird
+        //  spaltenName: Der Name der Spalte
+        //  zeilenName: Der Name der Zeile
+		__declspec( dllexport ) LRahmen *getARahmen( Text *spaltenName, Text *zeilenName ) const;
+        // Gibt einen Zeiger auf den Rahmen ohne erhöhten Reference Coune zurück, der bei dem Flag AuswahlMultistyled bei der auswahl eines bestimmten Kästchens verwendet wird
+        //  spaltenName: Der Name der Spalte
+        //  zeilenName: Der Name der Zeile
 		__declspec( dllexport ) LRahmen *zARahmen( Text *spaltenName, Text *zeilenName ) const;
-		__declspec( dllexport ) AlphaFeld *getAAlphaFeld( Text *spaltenName, Text *zeilenName ) const; // gibt das auswahl AlphaFeld zurück
+        // Gibt einen Zeiger auf den Farbübergang zurück, der bei dem Flag AuswahlMultistyled bei der auswahl eines bestimmten Kästchens verwendet wird
+        //  spaltenName: Der Name der Spalte
+        //  zeilenName: Der Name der Zeile
+		__declspec( dllexport ) AlphaFeld *getAAlphaFeld( Text *spaltenName, Text *zeilenName ) const;
+        // Gibt einen Zeiger auf den Farbübergang ohne erhöhten Reference Coune zurück, der bei dem Flag AuswahlMultistyled bei der auswahl eines bestimmten Kästchens verwendet wird
+        //  spaltenName: Der Name der Spalte
+        //  zeilenName: Der Name der Zeile
 		__declspec( dllexport ) AlphaFeld *zAAlphaFeld( Text *spaltenName, Text *zeilenName ) const;
-		__declspec( dllexport ) inline bool hatMsStyle( int sNum, int zNum, __int64 style ) const; // prüft, ob style vorhanden ist
-		__declspec( dllexport ) inline bool hatMsStyleNicht( int sNum, int zNum, __int64 style ) const; // prüft, ob style nicht vorhanden ist
-		__declspec( dllexport ) inline bool hatMsStyle( const char *spaltenName, const char *zeilenName, __int64 style ) const; // prüft, ob style vorhanden ist
-		__declspec( dllexport ) inline bool hatMsStyleNicht( const char *spaltenName, const char *zeilenName, __int64 style ) const; // prüft, ob style nicht vorhanden ist
-		__declspec( dllexport ) inline bool hatMsStyle( Text *spaltenName, Text *zeilenName, __int64 style ) const; // prüft, ob style vorhanden ist
-		__declspec( dllexport ) inline bool hatMsStyleNicht( Text *spaltenName, Text *zeilenName, __int64 style ) const; // prüft, ob style nicht vorhanden ist
-		__declspec( dllexport ) Zeichnung *dublizieren() const override; // Erzeugt eine Kopie des Zeichnungs
-		// Reference Counting
+        // Prüft ob bei dem Flag AuswahlMultistyled für ein bestimmtes Kästchen ein bestimmter Style gesetzt ist
+        //  sNum: Der Index der Spalte
+        //  zNum: Der Index der Zeile
+        //  style: Der Style, der gepfüft werden soll
+		__declspec( dllexport ) inline bool hatMsStyle( int sNum, int zNum, __int64 style ) const;
+        // Prüft ob bei dem Flag AuswahlMultistyled für ein bestimmtes Kästchen ein bestimmter Style nicht gesetzt ist
+        //  sNum: Der Index der Spalte
+        //  zNum: Der Index der Zeile
+        //  style: Der Style, der gepfüft werden soll
+		__declspec( dllexport ) inline bool hatMsStyleNicht( int sNum, int zNum, __int64 style ) const;
+        // Prüft ob bei dem Flag AuswahlMultistyled für ein bestimmtes Kästchen ein bestimmter Style gesetzt ist
+        //  spaltenName: Der Name der Spalte
+        //  zeilenName: Der Name der Zeile
+        //  style: Der Style, der gepfüft werden soll
+		__declspec( dllexport ) inline bool hatMsStyle( const char *spaltenName, const char *zeilenName, __int64 style ) const;
+        // Prüft ob bei dem Flag AuswahlMultistyled für ein bestimmtes Kästchen ein bestimmter Style nicht gesetzt ist
+        //  spaltenName: Der Name der Spalte
+        //  zeilenName: Der Name der Zeile
+        //  style: Der Style, der gepfüft werden soll
+		__declspec( dllexport ) inline bool hatMsStyleNicht( const char *spaltenName, const char *zeilenName, __int64 style ) const;
+        // Prüft ob bei dem Flag AuswahlMultistyled für ein bestimmtes Kästchen ein bestimmter Style gesetzt ist
+        //  spaltenName: Der Name der Spalte
+        //  zeilenName: Der Name der Zeile
+        //  style: Der Style, der gepfüft werden soll
+		__declspec( dllexport ) inline bool hatMsStyle( Text *spaltenName, Text *zeilenName, __int64 style ) const;
+        // Prüft ob bei dem Flag AuswahlMultistyled für ein bestimmtes Kästchen ein bestimmter Style nicht gesetzt ist
+        //  spaltenName: Der Name der Spalte
+        //  zeilenName: Der Name der Zeile
+        //  style: Der Style, der gepfüft werden soll
+		__declspec( dllexport ) inline bool hatMsStyleNicht( Text *spaltenName, Text *zeilenName, __int64 style ) const;
+        // Erzeugt eine Kopie der Tabelle, die ohne auswirkungen auf das Original verändert werden kann
+		__declspec( dllexport ) Zeichnung *dublizieren() const override;
+        // Erhöht den Reference Counting Zähler.
+        //  return: this.
 		__declspec( dllexport ) ObjTabelle *getThis();
+        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
+        //  return: 0.
 		__declspec( dllexport ) ObjTabelle *release();
 	};
 }

+ 3 - 3
TastaturEreignis.h

@@ -57,21 +57,21 @@ namespace Framework
 
     // Standart Tastatur Ereinis Rückruffunktion
     //  param: Ein beliebiger Parameter
-    //  obj: Das Zeichnung, welches diese Funktion aufruft
+    //  obj: Die Zeichnung, welches diese Funktion aufruft
     //  te: Das Tastaturereignis, welches verarbeitet werden soll
     //  return: (true), wenn aufrufende Zeichnung das Ereignis weiterverarbeiten soll. (false) sonnst.
     // Gibt immer (true) zurück
 	__declspec( dllexport ) bool _ret1TE( void *param, void *obj, TastaturEreignis te );
     // Standart Tastatur Ereinis Rückruffunktion
     //  param: Ein beliebiger Parameter
-    //  obj: Das Zeichnung, welches diese Funktion aufruft
+    //  obj: Die Zeichnung, welches diese Funktion aufruft
     //  te: Das Tastaturereignis, welches verarbeitet werden soll
     //  return: (true), wenn aufrufende Zeichnung das Ereignis weiterverarbeiten soll. (false) sonnst.
     // Gibt nur (true) zurück, wenn die Taste zwischen '0' und '9' ist, oder zum Löschen oder Cursorbewegen dient
 	__declspec( dllexport ) bool _nurNummernTE( void *param, void *obj, TastaturEreignis te );
     // Standart Tastatur Ereinis Rückruffunktion
     //  param: Ein beliebiger Parameter
-    //  obj: Das Zeichnung, welches diese Funktion aufruft
+    //  obj: Die Zeichnung, welches diese Funktion aufruft
     //  te: Das Tastaturereignis, welches verarbeitet werden soll
     //  return: (true), wenn aufrufende Zeichnung das Ereignis weiterverarbeiten soll. (false) sonnst.
     // Gibt nur (true) zurück, wenn die Taste zwischen '0' und '9' oder 'A' und 'F' ist, oder zum Löschen oder Cursorbewegen dient

+ 2 - 2
TextFeld.cpp

@@ -201,7 +201,7 @@ void TextFeld::updateVScroll( int pos ) // scrollt nach unten
         {
             if( sPos - schrift->getZeilenabstand() - schrift->getTextHöhe( &Text( "a" ) ) < vertikalScrollBar->getScroll() )
                 vertikalScrollBar->scroll( sPos - schrift->getZeilenabstand() - schrift->getTextHöhe( &Text( "a" ) ) );
-            if( sPos + schrift->getZeilenabstand() + schrift->getTextHöhe( &Text( "a" ) ) > vertikalScrollBar->getScroll() + vertikalScrollBar->getScrollData()->anzeigeHöhe )
+            if( sPos + schrift->getZeilenabstand() + schrift->getTextHöhe( &Text( "a" ) ) > vertikalScrollBar->getScroll() + vertikalScrollBar->getScrollData()->anzeige )
                 vertikalScrollBar->scroll( sPos + ( schrift->getZeilenabstand() + schrift->getTextHöhe( &Text( "a" ) ) ) * 2 - hö );
         }
         rend = 1;
@@ -236,7 +236,7 @@ void TextFeld::updateHScroll( int pos ) // scrollt zur Curser Position
             Text *t = text->getTeilText( p1, pos );
             int cbr = schrift->getTextBreite( t );
             t->release();
-            if( cbr + schriftGröße > horizontalScrollBar->getScroll() + horizontalScrollBar->getScrollData()->anzeigeBreite )
+            if( cbr + schriftGröße > horizontalScrollBar->getScroll() + horizontalScrollBar->getScrollData()->anzeige )
                 horizontalScrollBar->scroll( cbr + schriftGröße - br );
             if( cbr - schriftGröße < horizontalScrollBar->getScroll() )
                 horizontalScrollBar->scroll( cbr - schriftGröße );

+ 1 - 1
TextFeld.h

@@ -99,7 +99,7 @@ namespace Framework
         // Verarbeitet Tastatur Nachrichten
         //  me: Das Ereignis, was durch die Tastatureingabe ausgelößt wurde
 		__declspec( dllexport ) void doTastaturEreignis( TastaturEreignis &te ) override;
-        // Zeichnet das Objekt nach zRObj, falls er sichtbar ist
+        // Zeichnet das Objekt nach zRObj, falls es sichtbar ist
         //  zRObj: Das Bild, in welches gezeichnet werden soll
 		__declspec( dllexport ) virtual void render( Bild &zRObj ) override;
 		// Gibt den Text aus dem Textfeld zurück

+ 1 - 0
TexturModel.h

@@ -6,6 +6,7 @@ namespace Framework
 {
     class Bild; // Bild.h
 
+    // Ein 3D Modell, das zur Darstellung einer Textur im dreidimensionalen Raum verwendet werden kann
     class TexturModel : public Model3D
     {
     public:

+ 7 - 0
Thread.h

@@ -59,14 +59,21 @@ namespace Framework
 	void *threadStart( void *param ); // startet thread
 #endif
 
+    // Eine Klasse, die alle aktuell laufenden Thread Objekte speichert
     class ThreadRegister
     {
     private:
         Array< Thread* > threads;
 
     public:
+        // Fügt einen neuen Thread hinzu
+        //  t: Der Thread, der hinzugefügt werden soll
         void add( Thread *t );
+        // Entfernt einen neuen Thread
+        //  t: Der Thread, der entfernt werden soll
         void remove( Thread *t );
+        // Überprüft, ob ein Zeiger auf ein gültiges Thread Objekt zeigt, oder ob es schon gelöscht wurde
+        //  t: Der Zeiger, der geprüft werden soll
         bool isThread( Thread *t ) const;
     };
 }

+ 48 - 4
Vec2.h

@@ -5,27 +5,33 @@
 
 namespace Framework
 {
+    // Ein zweidimensionaler Vektor
 	template< typename T >
 	class Vec2
 	{
 	public:
-		T x;
-		T y;
+		T x; // x Komponente des Vektors
+		T y; // y Komponente des Vektors
 		// Konstruktor
 		inline Vec2()
 		{
 		}
+        // Konstruktor
+        //  x: X Komponente des Vektors
+        //  y: Y Komponente des Vektors
 		inline Vec2( T x, T y )
 			: x( x ),
 			  y( y )
 		{
 		}
+        // Konstruktor
+        //  vect: Ein Vektor, dessen Komponenten übernommen werden
 		inline Vec2( const Vec2 &vect )
 			: x( (T)vect.x ),
 			  y( (T)vect.y )
 		{
 		}
-		// nicht constant
+		// Skalliert den Vektor, so dass er die Länge 1 hat
 		inline Vec2 &normalize()
 		{
 			const T länge = län();
@@ -33,6 +39,7 @@ namespace Framework
 			y /= länge;
 			return *this;
 		}
+        // Dreht den Vektor um 90 Grad gegen den Uhrzeigersinn
 		inline Vec2 &CCW90()
 		{
 			T temp = y;
@@ -40,6 +47,7 @@ namespace Framework
 			x = temp;
 			return *this;
 		}
+        // Dreht den Vektor um 90 Grad im Uhrzeigersinn
 		inline Vec2 &CW90()
 		{
 			T temp = y;
@@ -47,6 +55,8 @@ namespace Framework
 			x = -temp;
 			return *this;
 		}
+        // Tauscht die Werte der Vektoren aus
+        //  vect: Der Vektor, mit dem getauscht werden soll
 		inline Vec2 &Swap( Vec2 &vect )
 		{
 			const Vec2 tmp = vect;
@@ -54,74 +64,100 @@ namespace Framework
 			*this = tmp;
 			return *this;
 		}
+        // nimmt die Werte eines anderen Vektors an
+        //  r: Der andere Vektor
 		inline Vec2 operator=( const Vec2 &r )
 		{
 			x = r.x;
 			y = r.y;
 			return *this;
 		}
+        // addiert einen anderen Vektor zu diesem hinzu
+        //  r: Der andere Vektor
 		inline Vec2 operator+=( const Vec2 &r )
 		{
 			x += r.x;
 			y += r.y;
 			return *this;
 		}
+        // Zieht einen anderen Vektor von diesem ab
+        //  r: Der andere Vektor
 		inline Vec2 operator-=( const Vec2 &r )
 		{
 			x -= r.x;
 			y -= r.y;
 			return *this;
 		}
+        // Skalliert diesen Vektor mit einem anderen Vektor
+        //  r: Der andere Vektor
 		inline Vec2 operator*=( const T &r )
 		{
 			x *= r;
 			y *= r;
 			return *this;
 		}
+        // Verkürtzt diesen Vektor durch einen anderen Vektor
+        //  r: Der andere Vektor
 		inline Vec2 operator/=( const T &r )
 		{
 			x /= r;
 			y /= r;
 			return *this;
 		}
-		// constant
+		// Bildet die Negation des Vektors
 		inline Vec2 operator-( ) const
 		{
 			return Vec2< T >( -x, -y );
 		}
+        // Konvertiert den Vektor in ein Vektor eines anderen Typs
 		template< typename T2 >
 		inline operator Vec2< T2 >() const
 		{
 			return Vec2< T2 >( (T2)x, (T2)y );
 		}
+        // Errechnet das Quadrat der Länge desVektors
 		inline T länSq() const
 		{
 			return *this * *this;
 		}
+        // Errechnet die Länge des Vektors
 		inline T län() const
 		{
 			return sqrt( länSq() );
 		}
+        // Errechnet das Skalarprodukt zwischen zwei Vektoren
+        //  r: Der andere Vektor
 		inline T operator*( const Vec2 &r ) const
 		{
 			return x * r.x + y * r.y;
 		}
+        // Addiert zwei Vektoren
+        //  r: Der andere Vektor
 		inline Vec2 operator+( const Vec2 &r ) const
 		{
 			return Vec2( *this ) += r;
 		}
+        // Subtrahiert zwei Vektoren
+        //  r: Der andere Vektor
 		inline Vec2 operator-( const Vec2 &r ) const
 		{
 			return Vec2( *this ) -= r;
 		}
+        // Multipliziert die Komponenten zweier Vektoren
+        //  r: Der andere Vektor
 		inline Vec2 operator*( const T &r ) const
 		{
 			return Vec2( *this ) *= r;
 		}
+        // Dividiert die Komponenten zweier Vektoren
+        //  r: Der andere Vektor
 		inline Vec2 operator/( const T &r ) const
 		{
 			return Vec2( *this ) /= r;
 		}
+        // Prüft, ob sich der Vektor in dem Rechteck zwischen zwei Vektoren befindet
+        //  p1: Ein Vektor zur einen Ecke des Rechtecks
+        //  p2: Ein Vektor zur gegenüberliegenden Ecke des Rechtecks
 		inline bool istInRegion( const Vec2 &p1, const Vec2 &p2 ) const
 		{
 			const T medianX = (T)( ( p1.x + p2.x ) / 2.0 );
@@ -129,18 +165,26 @@ namespace Framework
 			return abs< T >( medianX - x ) <= abs< T >( medianX - p1.x ) &&
 				   abs< T >( medianY - y ) <= abs< T >( medianY - p1.y );
 		}
+        // Überprüft zwei Vektoren auf Gleichheit
+        //  r: Der andere Vektor
 		inline bool operator==( const Vec2 &r ) const
 		{
 			return x == r.x && y == r.y;
 		}
+        // Überprüft zwei Vektoren auf Ungleichheit
+        //  r: Der andere Vektor
 		inline bool operator!=( const Vec2 &r ) const
 		{
 			return !( *this == r );
 		}
+        // Errechnet den Mittelpunkt zwischen zwei Vektoren
+        //  p2: Der andere Vektor
 		inline Vec2 mittelpunktMit( const Vec2 &p2 ) const
 		{
 			return Vec2( (T)( ( x + p2.x ) / 2.0 ), (T)( ( y + p2.y ) / 2.0 ) );
 		}
+        // Rotiert den Vektor gegen den Uhrzeigersinn
+        //  angle: Der Winkel in Bogenmas
 		inline Vec2 rotation( const float angle ) const
 		{
 			Vec2 result;

+ 45 - 5
Vec3.h

@@ -6,27 +6,34 @@
 namespace Framework
 {
 	template< typename T >
+    // Ein 3D Vektor
 	class Vec3
 	{
 	public:
-		T x;
-		T y;
-		T z;
+		T x; // X Komponente des Vektors
+		T y; // y Komponente des Vektors
+		T z; // z Komponente des Vektors
 		// Konstruktor
 		inline Vec3()
 		{
 		}
+        // Konstruktor
+        //  x: Die X Komponente des neuen Vektors
+        //  y: Die Y Komponente des neuen Vektors
+        //  z: Die Z Komponente des neuen Vektors
 		inline Vec3( T x, T y, T z )
 			: x( x ),
 			  y( y ),
 			  z( z )
 		{
 		}
+        // Konstruktor
+        //  vect: Ein Vektor, dessen Werte kopiert werden sollen
 		inline Vec3( const Vec3 &vect )
 			: Vec3( vect.x, vect.y, vect.z )
 		{
 		}
-		// nicht constant
+		// Skalliert den Vektor, so dass er die Länge 1 hat
 		inline Vec3 &normalize()
 		{
 			const T länge = län();
@@ -35,6 +42,8 @@ namespace Framework
 			z /= länge;
 			return *this;
 		}
+        // Vertaucht die Werte des Vektors mit denen eines anderen Vektor
+        //  vect: Der andere Vektor
 		inline Vec3 &Swap( Vec3 &vect )
 		{
 			const Vec3 tmp = vect;
@@ -42,6 +51,8 @@ namespace Framework
 			*this = tmp;
 			return *this;
 		}
+        // Kopiert die Werte eines anderen Vektors
+        //  r: Der andere Vektor
 		inline Vec3 operator=( const Vec3 &r )
 		{
 			x = r.x;
@@ -49,6 +60,8 @@ namespace Framework
 			z = r.z;
 			return *this;
 		}
+        // Addiert einen anderen Vektor zu diesem Hinzu
+        //  r: Der andere Vektor
 		inline Vec3 operator+=( const Vec3 &r )
 		{
 			x += r.x;
@@ -56,6 +69,8 @@ namespace Framework
 			z += r.z;
 			return *this;
 		}
+        // Zieht einen anderen Vektor von diesem ab
+        //  r: Der andere Vektor
 		inline Vec3 operator-=( const Vec3 &r )
 		{
 			x -= r.x;
@@ -63,6 +78,8 @@ namespace Framework
 			z -= r.z;
 			return *this;
 		}
+        // Skalliert diesen Vektor
+        //  r: Der Faktor
 		inline Vec3 operator*=( const T &r )
 		{
 			x *= r;
@@ -70,6 +87,8 @@ namespace Framework
 			z *= r;
 			return *this;
 		}
+        // Skalliert diesen Vektor mit 1/Faktor
+        //  r: Der Faktor
 		inline Vec3 operator/=( const T &r )
 		{
 			x /= r;
@@ -77,56 +96,77 @@ namespace Framework
 			z /= r;
 			return *this;
 		}
-		// constant
+		// Errechnet das Quadrat des Abstands zwischen zewi Vektoren
+        //  p: Der andere Vektor
         inline T abstandSq( const Vec3 &p ) const
         {
             return ( x - p.x ) * ( x - p.x ) + ( y - p.y ) * ( y - p.y ) + ( z - p.z ) * ( z - p.z );
         }
+        // Errechnet den Abstand zwischen zwei Vektoren
+        //  p: Der andere Vektor
         inline T abstand( const Vec3 &p ) const
         {
             return sqrt( abstandSq( p ) );
         }
+        // Gibt einen neuen Vektor zurück, der die negation von diesem ist
 		inline Vec3 operator-( ) const
 		{
 			return{ -x, -y, -z };
 		}
 		template< typename T2 >
+        // Konvertiert den Typ des Vektors in einen anderen
 		inline operator Vec3< T2 >() const
 		{
 			return{ (T2)x, (T2)y, (T2)z };
 		}
+        // Errechnet das Quadrat der Länge des Vektors
 		inline T länSq() const
 		{
 			return *this * *this;
 		}
+        // Errechnet due Länge des Vektors
 		inline T län() const
 		{
 			return sqrt( länSq() );
 		}
+        // Bildet das Skalarprodukt zwischen zwei Vektoren
+        //  r: Der andere Vektor
 		inline T operator*( const Vec3 &r ) const
 		{
 			return x * r.x + y * r.y + z * r.z;
 		}
+        // Errechnet die Summe zweier Vektoren
+        //  r: Der andere Vektor
 		inline Vec3 operator+( const Vec3 &r ) const
 		{
 			return Vec3( *this ) += r;
 		}
+        // Zieht zwei Vektoren von einander ab
+        //  r: Der andere Vektor
 		inline Vec3 operator-( const Vec3 &r ) const
 		{
 			return Vec3( *this ) -= r;
 		}
+        // Skalliert den Vektor ohne ihn zu verändern
+        //  r: Der Faktor
 		inline Vec3 operator*( const T &r ) const
 		{
 			return Vec3( *this ) *= r;
 		}
+        // Skalliert den Vektor mit 1/Faktor ohne ihn zu Verändern
+        //  r: Der Faktor
 		inline Vec3 operator/( const T &r ) const
 		{
 			return Vec3( *this ) /= r;
 		}
+        // Überprüft zwei Vektoren auf Gleichheit
+        //  r: Der andere Vektor
 		inline bool operator==( const Vec3 &r ) const
 		{
 			return x == r.x && y == r.y && z == r.z;
 		}
+        // Überprüft zwei Vektoren auf Ungleichheit
+        //  r: Der andere Vektor
 		inline bool operator!=( const Vec3 &r ) const
 		{
 			return !( *this == r );

+ 0 - 135
Vec4.h

@@ -1,135 +0,0 @@
-#pragma once
-
-#include "Vec3.h"
-
-namespace Framework
-{
-    template< typename T >
-    class Vec4
-    {
-    public:
-        T x;
-        T y;
-        T z;
-        T w;
-        // Konstruktor
-        inline Vec4()
-        {}
-        inline Vec4( T x, T y, T z, T w )
-            : x( x ),
-            y( y ),
-            z( z ),
-            w( w )
-        {}
-        inline Vec4( const Vec4 &vect )
-            : Vec4( vect.x, vect.y, vect.z, vect.w )
-        {}
-        // nicht constant
-        inline Vec4 &normalize()
-        {
-            const T länge = län();
-            x /= länge;
-            y /= länge;
-            z /= länge;
-            w /= länge;
-            return *this;
-        }
-        inline Vec4 &Swap( Vec4 &vect )
-        {
-            const Vec4 tmp = vect;
-            vect = *this;
-            *this = tmp;
-            return *this;
-        }
-        inline Vec4 operator=( const Vec4 &r )
-        {
-            x = r.x;
-            y = r.y;
-            z = r.z;
-            w = r.w;
-            return *this;
-        }
-        inline Vec4 operator+=( const Vec4 &r )
-        {
-            x += r.x;
-            y += r.y;
-            z += r.z;
-            w += r.w;
-            return *this;
-        }
-        inline Vec4 operator-=( const Vec4 &r )
-        {
-            x -= r.x;
-            y -= r.y;
-            z -= r.z;
-            w -= r.w;
-            return *this;
-        }
-        inline Vec4 operator*=( const T &r )
-        {
-            x *= r;
-            y *= r;
-            z *= r;
-            w *= r;
-            return *this;
-        }
-        inline Vec4 operator/=( const T &r )
-        {
-            x /= r;
-            y /= r;
-            z /= r;
-            w /= r;
-            return *this;
-        }
-        // constant
-        inline Vec4 operator-() const
-        {
-            return{ -x, -y, -z, -w };
-        }
-        template< typename T2 >
-        inline operator Vec4< T2 >() const
-        {
-            return{ (T2)x, (T2)y, (T2)z, (T2)w };
-        }
-        inline T länSq() const
-        {
-            return *this * *this;
-        }
-        inline T län() const
-        {
-            return sqrt( länSq() );
-        }
-        inline T operator*( const Vec4 &r ) const
-        {
-            return x * r.x + y * r.y + z * r.z;// +w * r.w;
-        }
-        inline T operator*( const Vec3< T > &r ) const
-        {
-            return x * r.x + y * r.y + z * r.z + w;
-        }
-        inline Vec4 operator+( const Vec4 &r ) const
-        {
-            return Vec4( *this ) += r;
-        }
-        inline Vec4 operator-( const Vec4 &r ) const
-        {
-            return Vec4( *this ) -= r;
-        }
-        inline Vec4 operator*( const T &r ) const
-        {
-            return Vec4( *this ) *= r;
-        }
-        inline Vec4 operator/( const T &r ) const
-        {
-            return Vec4( *this ) /= r;
-        }
-        inline bool operator==( const Vec4 &r ) const
-        {
-            return x == r.x && y == r.y && z == r.z && w == r.w;
-        }
-        inline bool operator!=( const Vec4 &r ) const
-        {
-            return !( *this == r );
-        }
-    };
-}

+ 0 - 120
Welt2D.cpp

@@ -1,120 +0,0 @@
-#include "Welt2D.h"
-#include "Model2D.h"
-
-using namespace Framework;
-
-// Inhalt der Welt2D Klasse aus Welt3D.h
-// Konstruktor
-Welt2D::Welt2D()
-{
-    obj = new RCArray< Model2D >();
-    ref = 1;
-}
-
-// Destruktor
-Welt2D::~Welt2D()
-{
-    obj->release();
-}
-
-// nicht constant
-void Welt2D::addModel( Model2D *obj )
-{
-    this->obj->add( obj, 0 );
-}
-
-void Welt2D::removeModel( Model2D *zObj )
-{
-    auto *e = &obj->getArray();
-    for( int z = 0; e && e->set; z++, e = e->next )
-    {
-        if( e->var == zObj )
-        {
-            obj->lösche( z );
-            return;
-        }
-    }
-}
-
-void Welt2D::setModelInVordergrund( Model2D *zObj )
-{
-    auto *e = &obj->getArray();
-    for( int z = 0; e && e->set; z++, e = e->next )
-    {
-        if( e->var == zObj )
-        {
-            obj->setPosition( z, 0 );
-            return;
-        }
-    }
-}
-
-void Welt2D::setModelInHintergrund( Model2D *zObj )
-{
-    int anz = obj->getEintragAnzahl();
-    auto *e = &obj->getArray();
-    for( int z = 0; e && e->set; z++, e = e->next )
-    {
-        if( e->var == zObj && z != anz - 1 )
-        {
-            obj->setPosition( z, anz - 1 );
-            return;
-        }
-    }
-}
-
-void Welt2D::removeAll()
-{
-    obj->leeren();
-}
-
-void Welt2D::doMausEreignis( MausEreignis &me )
-{
-
-}
-
-void Welt2D::doTastaturEreignis( TastaturEreignis &me )
-{
-
-}
-
-bool Welt2D::tick( double t )
-{
-    return 0;
-}
-
-void Welt2D::render( Bild &zRObj, Punkt &wPos, Punkt &wGr, Punkt &kamGr )
-{
-
-}
-
-// constant
-int Welt2D::getModelAnzahl() const
-{
-    return obj->getEintragAnzahl();
-}
-
-Model2D *Welt2D::getModel( int z ) const
-{
-    return obj->get( z );
-}
-
-Model2D *Welt2D::zModel( int z ) const
-{
-    return obj->z( z );
-}
-
-// Reference Counting
-Welt2D *Welt2D::getThis()
-{
-    ref++;
-    return this;
-}
-
-Welt2D *Welt2D::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}

+ 0 - 54
Welt2D.h

@@ -1,54 +0,0 @@
-#pragma once
-
-#include "Array.h"
-#include "Punkt.h"
-
-namespace Framework
-{
-    class Model2D; // Model2D.h
-    struct MausEreignis;
-    struct TastaturEreignis;
-    class Bild;
-
-    class Welt2D
-    {
-    public:
-        class Style
-        {
-        public:
-            const static __int64 HORIZONTAL_UNENDLICH = 0x0001; // Zeichnunge die rechts austreten erscheinen links wieder und umgekehrt
-            const static __int64 VERTIKAL_UNENDLICH = 0x0002; // Zeichnunge die unten austreten erscheinen oben wieder und umgekehrt
-            const static __int64 BEI_VERLASSEN_LÖSCHEN = 0x0004; // Entfernt Zeichnunge, die die Welt an den Rändern verlassen
-            const static __int64 HINTERGRUND_BENUTZEN = 0x0008; // Legt fest ob es eine seperate Liste mit HintergrundZeichnungen gibt
-            const static __int64 HINTERGRUND_EREIGNISSE = 0x0010; // Legt festm ob die HintergrundZeichnunge Benutzereingaben empfangen
-            const static __int64 HINTERGRUND_TICK = 0x0020; // Legt fest, ob der Hintergrund annimerbar ist
-        };
-    private:
-        RCArray< Model2D > *obj;
-        int style;
-        int ref;
-
-    public:
-        // Konstruktor
-        Welt2D();
-        // Destruktor
-        ~Welt2D();
-        // nicht constant
-        void addModel( Model2D *obj );
-        void removeModel( Model2D *zObj );
-        void setModelInVordergrund( Model2D *zObj );
-        void setModelInHintergrund( Model2D *zObj );
-        void removeAll();
-        void doMausEreignis( MausEreignis &me );
-        void doTastaturEreignis( TastaturEreignis &me );
-        bool tick( double t );
-        void render( Bild &zRObj, Punkt &wPos, Punkt &wGr, Punkt &kamGr );
-        // constant
-        int getModelAnzahl() const;
-        Model2D *getModel( int z ) const;
-        Model2D *zModel( int z ) const;
-        // Reference Counting
-        Welt2D *getThis();
-        Welt2D *release();
-    };
-}

+ 1 - 0
Welt3D.h

@@ -8,6 +8,7 @@ namespace Framework
     class Zeichnung3D; // Zeichnung.h
     class Render3D; // Render3D.h
 
+    // Speichert alle 3D Zeichnungen einer Szene ab
     class Welt3D
     {
     private:

+ 4 - 4
Zeichnung.cpp

@@ -780,7 +780,7 @@ void ZeichnungHintergrund::render( Bild &rObj )
                 unlockZeichnung();
                 return;
             }
-            horizontalScrollBar->update( horizontalScrollBar->getScrollData()->maxBreite, innenGröße.x );
+            horizontalScrollBar->update( horizontalScrollBar->getScrollData()->max, innenGröße.x );
         }
         else
         {
@@ -792,7 +792,7 @@ void ZeichnungHintergrund::render( Bild &rObj )
                 return;
             }
         }
-        vertikalScrollBar->update( vertikalScrollBar->getScrollData()->maxHöhe, innenGröße.y );
+        vertikalScrollBar->update( vertikalScrollBar->getScrollData()->max, innenGröße.y );
     }
     else if( hs )
     {
@@ -959,13 +959,13 @@ Zeichnung *ZeichnungHintergrund::dublizieren() const // Erzeugt eine Kopie des Z
     if( vertikalScrollBar )
     {
         obj->setVertikalKlickScroll( vertikalScrollBar->getKlickScroll() );
-        obj->setVertikalScrollPos( vertikalScrollBar->getScrollData()->anzeigeBeginn );
+        obj->setVertikalScrollPos( vertikalScrollBar->getScroll() );
         obj->setVertikalScrollFarbe( vertikalScrollBar->getFarbe(), vertikalScrollBar->getBgFarbe() );
     }
     if( horizontalScrollBar )
     {
         obj->setHorizontalKlickScroll( horizontalScrollBar->getKlickScroll() );
-        obj->setHorizontalScrollPos( horizontalScrollBar->getScrollData()->anzeigeBeginn );
+        obj->setHorizontalScrollPos( horizontalScrollBar->getScroll() );
         obj->setHorizontalScrollFarbe( horizontalScrollBar->getFarbe(), horizontalScrollBar->getBgFarbe() );
     }
     return obj;

+ 164 - 59
Zeichnung.h

@@ -19,15 +19,16 @@ namespace Framework
     class VScrollBar; // Scroll.h
     class HScrollBar; // Scroll.h
 
+    // Eine Zeichnung für das 2D GUI Framework
 	class Zeichnung
 	{
     public:
         class Style
         {
         public:
-            const static __int64 Sichtbar = 0x00001;
-            const static __int64 Erlaubt = 0x00002;
-            const static __int64 Fokus = 0x00040;// 0x80
+            const static __int64 Sichtbar = 0x00001; // Wenn dieser Style gesetzt ist, wird die Zeichnung beim Zeichnen angezeigt
+            const static __int64 Erlaubt = 0x00002; // Wenn dieser Style gesetzt ist, kann der Benutzer mit der Zeichnung interagieren
+            const static __int64 Fokus = 0x00040; // Wenn dieser Style gesetzt ist, werden die Tastatur Ereignisse von der Zeichnung verarbeitet
         };
 	protected:
 		Punkt pos;
@@ -51,50 +52,130 @@ namespace Framework
 		__declspec( dllexport ) Zeichnung();
 		// Destruktor 
 		__declspec( dllexport ) ~Zeichnung();
-		// nicht constant 
+		// Legt fest, ob sich die Zeichnung seit des letzten Bildes verändert hat und neu gezeichnet werden muss
 		__declspec( dllexport ) void setRender();
+        // Setzt den Text, der erscheint, wenn der Benutzer für längere Zeit mit der Maus in der Zeichnung verweilt
+        //  txt: Der Text, der angezeigt werden soll
+        //  zScreen: Ein Zeiger auf das Verwendete Bildschirm Objekt ohne erhöhten Reference Counter
 		__declspec( dllexport ) void setToolTipText( const char *txt, Bildschirm *zScreen );
+        // Dies ist notwendig, falls mehrere Threads gleichzeitig die Zeichnung benutzen.
+        // Wenn lockZeichnung() von zwei threads aufgerufen wird, wartet der letzte so lange, bis der erste unlockZeichnung() aufgerufen hat.
 		__declspec( dllexport ) void lockZeichnung();
+        // Dies ist notwendig, falls mehrere Threads gleichzeitig die Zeichnung benutzen.
+        // Wenn lockZeichnung() von zwei threads aufgerufen wird, wartet der letzte so lange, bis der erste unlockZeichnung() aufgerufen hat.
 		__declspec( dllexport ) void unlockZeichnung();
-		__declspec( dllexport ) void setMausEreignisParameter( void *p ); // setzt den Parameter vom Maus Ereignis
-		__declspec( dllexport ) void setTastaturEreignisParameter( void *p ); // setzt den Parameter vom Tastatur Ereignis
-		__declspec( dllexport ) void setMausEreignis( bool( *ak )( void *, void *, MausEreignis ) ); // setzt das Maus Ereignis
-		__declspec( dllexport ) void setTastaturEreignis( bool( *ak )( void *, void *, TastaturEreignis ) ); // setzt das TastaturEreignis
-		__declspec( dllexport ) void setNMausEreignisParameter( void *p ); // setzt den Parameter vom Maus Ereignis
-		__declspec( dllexport ) void setNTastaturEreignisParameter( void *p ); // setzt den Parameter vom Tastatur Ereignis
-		__declspec( dllexport ) void setNMausEreignis( bool( *ak )( void *, void *, MausEreignis ) ); // setzt das Maus Ereignis
-		__declspec( dllexport ) void setNTastaturEreignis( bool( *ak )( void *, void *, TastaturEreignis ) ); // setzt das TastaturEreignis
-		__declspec( dllexport ) virtual void doMausEreignis( MausEreignis &me ); // ruft Mak auf
-		__declspec( dllexport ) virtual void doTastaturEreignis( TastaturEreignis &te ); // ruft Tak auf
-		__declspec( dllexport ) virtual bool tick( double tickval ); // tick
-		__declspec( dllexport ) void setPosition( const Punkt &pos ); // setzt die position
-		__declspec( dllexport ) void setX( int xPos ); // setzt die x position
-		__declspec( dllexport ) void setY( int yPos ); // setzt die y position
-		__declspec( dllexport ) void setGröße( const Punkt &gr ); // setzt die Größe
-		__declspec( dllexport ) void setPosition( int x, int y ); // setzt die position
-		__declspec( dllexport ) void setGröße( int x, int y ); // setzt die Größe
-		__declspec( dllexport ) void setStyle( __int64 style ); // setzt den Style des Zeichnunges
-		__declspec( dllexport ) void setStyle( __int64 style, bool add_löschen );
+        // setzt den Parameter, der bei einem Maus Ereignis an die Rückruffunktion übergeben wird
+        //  p: Der Parameter
+		__declspec( dllexport ) void setMausEreignisParameter( void *p );
+        // Setzt den Parameter, der bei einem Tastatur Ereignis an die Rückruffunktion übergeben wird
+        //  p: Der Parameter
+		__declspec( dllexport ) void setTastaturEreignisParameter( void *p );
+        // Setzt die Rückruffunktion, die bei einem Maus Ereignis aufgerufen werden soll.
+        // Wenn die Rückruffunktion 0 zurückgiebt, oder nicht gesetzt wurde, wird ein Maus Ereignis von der Zeichnung nicht weiter beachtet
+        // Es kann die Standartfunktion __ret1ME verwendet werden, die in MausEreignis.h definiert ist und immer 1 zurückgibt
+		//  ak: Ein Zeiger auf die Rückruffunktion
+        __declspec( dllexport ) void setMausEreignis( bool( *ak )( void *, void *, MausEreignis ) );
+        // Setzt die Rückruffunktion, die bei einem Tastatur Ereignis aufgerufen werdne soll.
+        // Wenn die Rückruffunktion 0 zurückgiebt, oder nicht gesetzt wurde, wird ein Tastatur Ereignis von der Zeichnung nicht weiter beachtet
+        // Es kann die Standartfunktion __ret1TE verwendet werden, die in TastaturEreignis.h definiert ist und immer 1 zurückgibt
+        // Weitere Standartfunktionen sind _nurNummernTE und _nurHexTE ebenfals aus TastaturEreignis.h
+        //  ak: Ein Zeiger auf die Rückruffunktion
+		__declspec( dllexport ) void setTastaturEreignis( bool( *ak )( void *, void *, TastaturEreignis ) );
+        // setzt den Parameter, der bei einem Maus Ereignis an die Rückruffunktion übergeben wird, die aufgerufen wird, fals das Ereignis von der Zeichnung verarbeitet wurde
+        //  p: Der Parameter
+		__declspec( dllexport ) void setNMausEreignisParameter( void *p );
+        // Setzt den Parameter, der bei einem Tastatur Ereignis an die Rückruffunktion übergeben wird, die aufgerufen wird, fals das Ereignis von der Zeichnung verarbeitet wurde
+        //  p: Der Parameter
+		__declspec( dllexport ) void setNTastaturEreignisParameter( void *p );
+        // Setzt die Rückruffunktion, die bei einem Maus Ereignis aufgerufen werden soll, nachdem das Ereignis bereits von der Zeichnung verarbeitet wurde
+        // Wenn die Rückruffunktion 1 zurückgiebt, oder nicht gesetzt wurde, wird das Maus Ereignis von keiner weiteren Zeichnung verarbeitet, die zum Beispiel hinter dieser Zeichnung liegen
+        // Es kann die Standartfunktion __ret1ME verwendet werden, die in MausEreignis.h definiert ist und immer 1 zurückgibt
+        //  ak: Ein Zeiger auf die Rückruffunktion
+		__declspec( dllexport ) void setNMausEreignis( bool( *ak )( void *, void *, MausEreignis ) );
+        // Setzt die Rückruffunktion, die bei einem Tastatur Ereignis aufgerufen werdne soll, nachdem das Ereignis bereits von der Zeichnung verarbeitet wurde
+        // Wenn die Rückruffunktion 1 zurückgiebt, oder nicht gesetzt wurde, wird das Tastatur Ereignis von keiner weiteren Zeichnung verarbeitet
+        // Es kann die Standartfunktion __ret1TE verwendet werden, die in TastaturEreignis.h definiert ist und immer 1 zurückgibt
+        // Weitere Standartfunktionen sind _nurNummernTE und _nurHexTE ebenfals aus TastaturEreignis.h
+        //  ak: Ein Zeiger auf die Rückruffunktion
+		__declspec( dllexport ) void setNTastaturEreignis( bool( *ak )( void *, void *, TastaturEreignis ) );
+        // Verarbeitet ein Maus Ereignis. Wird vom Framework automatisch aufgerufen.
+        //  me: Das Ereignis
+		__declspec( dllexport ) virtual void doMausEreignis( MausEreignis &me );
+        // Verarbeitet ein Tastatur Ereignis. Wird vom Framework automatisch aufgerufen
+        //  te: Das Ereignis
+		__declspec( dllexport ) virtual void doTastaturEreignis( TastaturEreignis &te );
+        // Verarbeitet die Zeit, die seit dem letzten aufruf dieser Funktion vergangen ist
+        //  tickVal: Die vergangene Zeit in Sekunden
+		__declspec( dllexport ) virtual bool tick( double tickval );
+        // Setzt die Position der Zeichnung
+        //  pos: Die Position in Pixeln
+		__declspec( dllexport ) void setPosition( const Punkt &pos );
+        // Setzt die X Position der Zeichnung
+        //  xPos: Die Position in Pixeln
+		__declspec( dllexport ) void setX( int xPos );
+        // Setzt die Y Position der Zeichnung
+        //  yPos: Die Position in Pixeln
+		__declspec( dllexport ) void setY( int yPos );
+        // Setzt die Größe der Zeichnung
+        //  gr: Ein Punkt mit x als Breite und y als Höhe in Pixeln
+        __declspec( dllexport ) void setGröße( const Punkt &gr );
+        // Setzt die Position der Zeichnung
+        //  x: Die X Position in Pixeln
+        //  y: Die Y Position in Pixeln
+		__declspec( dllexport ) void setPosition( int x, int y );
+        // Setzt die Größe der Zeichnung
+        //  br: Die Breite in Pixeln
+        //  hö: Die Höhe in Pixeln
+		__declspec( dllexport ) void setGröße( int br, int hö );
+        // Setzt den Style der Zeichnung
+        //  style: Der neue Style bestehend aus den Flags aus der zugehörigen Style Klasse
+		__declspec( dllexport ) void setStyle( __int64 style );
+        // Setzt den Style der Zeichnung
+        //  style: Alle Style Flags, die verändert werden sollen
+        //  add_löschen: 1, falls der Style hinzugefügt werden soll. 0, falls der Style entfernt weden soll
+        __declspec( dllexport ) void setStyle( __int64 style, bool add_löschen );
+        // Fügt Style Flags hinzu
+        //  style: Der Style, der hinzugefügt werden soll
 		__declspec( dllexport ) void addStyle( __int64 style );
+        // Entfernt Style Flags
+        //  style: Der Style, der entfernt werden soll
 		__declspec( dllexport ) void löscheStyle( __int64 style );
-		__declspec( dllexport ) virtual void render( Bild &zRObj ); // zeichnet nach zRObj
-		// constant 
-		__declspec( dllexport ) bool hatMausEreignis() const; // prüft, ob Mak gesetzt ist
-		__declspec( dllexport ) bool hatTastaturEreignis() const; // prüft, ob Tak gesetzt ist
-		__declspec( dllexport ) const Punkt &getPosition() const; // gibt die Position zurück
-		__declspec( dllexport ) const Punkt &getGröße() const; // gibt die Größe zurück
-		__declspec( dllexport ) int getBreite() const; // gibt die Breite zurück
-		__declspec( dllexport ) int getHöhe() const; // gibt die Höhe zurück
-		__declspec( dllexport ) int getX() const; // gibt X zurück
-		__declspec( dllexport ) int getY() const; // gibt Y zurück
-		__declspec( dllexport ) ToolTip *getToolTip() const; // gibt den ToolTip Text
+        // Zeichnet die Zeihnung in ein bestimmtes Bild
+        //  zRObj: Das Bild, in das gezeichnet werden soll
+		__declspec( dllexport ) virtual void render( Bild &zRObj );
+		// Gibt zurück, ob eine Rückruffunktion für Maus Ereignisse gesetzt wurde
+		__declspec( dllexport ) bool hatMausEreignis() const;
+        // Gibt zurück, ob eine Rückruffunktion für Tastatur Ereignisse gesetzt wurde
+		__declspec( dllexport ) bool hatTastaturEreignis() const;
+        // Gibt die Position der Zeichnung in Pixeln zurück
+		__declspec( dllexport ) const Punkt &getPosition() const;
+        // Gibt die Größe der Zeichnung in Pixeln zurück. x für Breite und y für Höhe
+		__declspec( dllexport ) const Punkt &getGröße() const;
+        // Gibt die Breite der Zeichnung in Pixeln zurück
+		__declspec( dllexport ) int getBreite() const;
+        // Gibt die Höhe der Zeichnung in Pixeln zurück
+		__declspec( dllexport ) int getHöhe() const;
+        // Gibt die X Position der Zeichnung in Pixeln zurück
+		__declspec( dllexport ) int getX() const;
+        // Gibt die Y Position der Zeichnung in Pixeln zurück
+		__declspec( dllexport ) int getY() const;
+        // Gibt einen Zeiger auf das Tooltip Objekt zurück, walls es verwendet wird
+		__declspec( dllexport ) ToolTip *getToolTip() const;
+        // Gibt einen Zeiger auf das Tooltip Objekt ohne erhöhten Reference Counter zurück, walls es verwendet wird
 		__declspec( dllexport ) ToolTip *zToolTip() const;
-        __declspec( dllexport ) inline bool hatStyle( __int64 style ) const; // prüft, ob style vorhanden
-        __declspec( dllexport ) inline bool hatStyleNicht( __int64 style ) const; // prüft, ob style nicht vorhanden
-		__declspec( dllexport ) virtual Zeichnung *dublizieren() const; // Erzeugt eine Kopie des Zeichnungs
-		// reference Counting 
+        // Gibt zurück, ob bestimmte Styles gesetzt wurden
+        //  style: Die Styles, die überprüft werden sollen
+        //  return: 1, falls alle Styles in style gesetzt wurden
+        __declspec( dllexport ) inline bool hatStyle( __int64 style ) const;
+        // Gibt zurück, ob bestimmte Styles nicht gesetzt wurden
+        //  style: Die Styles, die geprüft werden sollen
+        //  return: 1, falls alle Styles in style nicht gesetzt wurden
+        __declspec( dllexport ) inline bool hatStyleNicht( __int64 style ) const;
+        // Kopiert die Komplette Zeichnung, so dass sie ohne Effekt auf das Original verändert werden kann
+        __declspec( dllexport ) virtual Zeichnung *dublizieren() const;
 	};
 
+    // Ein Array von Zeichnungen, der von den Bildschirm Klassen verwendet wird, um die Objekte der GUI zu speichern
 	class ZeichnungArray// Array von Zeichnungen
 	{
 	private:
@@ -107,34 +188,58 @@ namespace Framework
 		__declspec( dllexport ) ZeichnungArray();
 		// Destruktor 
 		__declspec( dllexport ) ~ZeichnungArray();
-		// nicht const 
-		__declspec( dllexport ) bool addZeichnung( Zeichnung *obj ); // Fügt ein Zeichnung hinzu
-		__declspec( dllexport ) bool removeZeichnung( Zeichnung *obj ); // Entfernt ein Zeichnung
-		__declspec( dllexport ) bool removeZeichnung( int i ); // Entfernt das i-te Zeichnung
-		__declspec( dllexport ) void setNext0(); // Setzt das nächste Zeichnung zu 0
-		__declspec( dllexport ) void updateIndex( int i ); // aktualisiert die Index variable
-		// constant 
-		__declspec( dllexport ) ZeichnungArray *getNext() const; // gibt das nächste Zeichnung zurück
-		__declspec( dllexport ) Zeichnung *getZeichnung( int i ) const; // gibt das i-te Zeichnung zurück
-		__declspec( dllexport ) Zeichnung *getZeichnung() const; // gibt das Zeichnung zurück
-		__declspec( dllexport ) int getIndex() const; // Gibt den Index zurück
-		__declspec( dllexport ) void sendMausAll( MausEreignis &me ) const; // sendet me an alle volgenden Zeichnunge
-		__declspec( dllexport ) void sendTastaturAll( TastaturEreignis &te ) const; // sendet te an alle volgenden Zeichnunge
-		__declspec( dllexport ) void render( Bild &zRObj ); // Zeichnet alle nach zRObj
-		__declspec( dllexport ) bool tick( double tickval ); // tick
-	};
+		// Fügt dem Array eine Zeichnung hinzu. Es kann jede Zeichnung nur einmal hinzugefügt werden
+		//  obj: Die neue Zeichnung
+        //  return: 1, falls die Zeichnung erfolgreich hinzugefügt wurde.
+        __declspec( dllexport ) bool addZeichnung( Zeichnung *obj );
+        // Entfernt eine Zeichnung
+        //  obj: Die Zeichnung, die entfernt werden soll
+        //  return 1, falls die Zeichnung erfolgreich entfernt wurde
+        __declspec( dllexport ) bool removeZeichnung( Zeichnung *obj );
+        // Entfernt eine Zeichnung
+        //  i: Der Index der Zeichnung, die entfernt werden soll
+        //  return 1, falls die Zeichnung erfolgreich entfernt wurde
+		__declspec( dllexport ) bool removeZeichnung( int i );
+        // Setzt den Zeiger auf das Nächste Array Element auf 0
+		__declspec( dllexport ) void setNext0();
+        // Aktualisiert die Array indizes.
+        //  i: Der Index des ersten Elements
+		__declspec( dllexport ) void updateIndex( int i );
+		// Gibt den Zeiger auf das nchste Array Element zurück
+		__declspec( dllexport ) ZeichnungArray *getNext() const;
+        // Gibt eine Zeichnung zurück
+        //  i: Der Index der Zeichnung
+		__declspec( dllexport ) Zeichnung *getZeichnung( int i ) const;
+        // Gibt die Zeichnung dieses Array Elements zurück
+		__declspec( dllexport ) Zeichnung *getZeichnung() const;
+        // Gibt den Index dieses Array Elements zurück
+		__declspec( dllexport ) int getIndex() const;
+        // Sendet an alle Zeichnungen ein Maus Ereignis. Die zuletzt hinzugefügte Zeichnung bekommt das Ereignis als Erste
+        //  me: Das Ereignis
+		__declspec( dllexport ) void sendMausAll( MausEreignis &me ) const;
+        // Sendet an alle Zeichnungen ein Tastatur Ereignis. Die zuletzt hinzugefügte Zeichnung bekommt das Ereignis als Erste
+        //  te: Das Ereignis
+		__declspec( dllexport ) void sendTastaturAll( TastaturEreignis &te ) const;
+        // Zeichnet alle Zeichnungen. Die zuletzt hinzugefügte Zeichnung ist oben
+        //  zRObj: Das Bild, in das alle Zeichnungen gezeichnet werden sollen
+		__declspec( dllexport ) void render( Bild &zRObj );
+        // Verarbeitet bei allen Zeichnungen die Vergangene Zeit seit dem letzten Aufruf der Funktion
+        //  tickVal: Die vergangene Zeit in Sekunden
+		__declspec( dllexport ) bool tick( double tickval );
+    };
 
+    // Eine Zeichnung für das 2D GUI Framework mit Hintergrund, Rahmen und Scroll Balken
     class ZeichnungHintergrund : public Zeichnung
     {
     public:
         class Style : public Zeichnung::Style
         {
         public:
-            const static __int64 Rahmen = 0x00010; // 0x4
-            const static __int64 Hintergrund = 0x00020; // 0x8
-            const static __int64 HAlpha = 0x00040; // 0x10
-            const static __int64 HBild = 0x00080; // 0x20
-            const static __int64 Buffered = 0x00100; // 0x40
+            const static __int64 Rahmen = 0x00010; // Wenn dieser Flag gesetzt wird, bekommt die Zeichnugn einen Rahmen
+            const static __int64 Hintergrund = 0x00020; // Wenn dieser Flag gesetzt wird, bekommt die Zeichnung einen Hintergrund
+            const static __int64 HAlpha = 0x00040; // Wenn dieser Flag gesetzt wird, wird der Hintergrund durchsichtig. Benötigt Flag Hintergrund
+            const static __int64 HBild = 0x00080; // Wenn dieser Flag gesetzt wird, wird ein Bild als hintergrund verwendet. Benötigt Flag Hintergrund
+            const static __int64 Buffered = 0x00100; // Wenn dieser Flag gesetzt wird, Erscheint ein Farbübergang als Rahmen
             const static __int64 VScroll = 0x00200; // Wenn dieser Flag gesetzt wird, erscheint eine Scrollbar am rechten Rand
             const static __int64 HScroll = 0x00400; // Wenn dieser Flag gesetzt wird, erscheint eine Scrollbar am unteren Rand
         };