فهرست منبع

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 10 سال پیش
والد
کامیت
2e41c0bc98
50فایلهای تغییر یافته به همراه2139 افزوده شده و 1621 حذف شده
  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
         };