home *** CD-ROM | disk | FTP | other *** search
- /* VCIRC.CPP - Beispiel aus Kapitel 5 der
- Einführung */
-
- // Klasse Circle aus Point abgeleitet
-
- #include <graphics.h> // Deklaration der
- // Grafik-Bibliothek
- #include "vpoint.h" // Deklaration der Klassen
- // Location und Point
- #include <conio.h> // für Funktion getch()
-
- // mit vpoint.obj und graphics.lib linken
-
- class Circle : public Point
- { // abgeleitet von der Klasse Point
- // und von der Klasse Location
-
- int Radius; // private voreingestellt
-
- public:
- Circle(int InitX, int InitY, int InitRadius);
- void Show(void);
- void Hide(void);
- void Expand(int ExpandBy);
- void Contract(int ContractBy);
- };
-
- // Circle-Konstruktor ruft Point-Konstruktor
- // zuerst auf
- Circle::Circle(int InitX, int InitY,
- int InitRadius)
- : Point(InitX,InitY)
- {
- Radius = InitRadius;
- };
-
- void Circle::Show()
- {
- Visible = true;
-
- // zeichnet Kreis mit BGI-Funktion
- circle(X, Y, Radius);
- }
-
- void Circle::Hide()
- {
- // verbergen nicht nötig
- if (!Visible) return;
-
- // aktuelle Farbe speichern
- unsigned int TempColor;
-
- // aktuelle Farben einstellen
- // Zeichenfarbe ist die Hintergrundfarbe
- TempColor = getcolor();
- setcolor(getbkcolor());
-
- // mit der Hintergrundfarbe löschen
- Visible = false;
- circle(X, Y, Radius);
-
- // auf die aktuelle Farbe zurücksetzen
- setcolor(TempColor);
- };
-
- void Circle::Expand(int ExpandBy)
- {
- // ist der aktuelle Kreis sichtbar?
- // wenn ja, verbergen
- Boolean vis = Visible;
- if (vis) Hide();
-
- // Radius vergrößern
- Radius += ExpandBy;
-
- // negativen Radius vermeiden
- if (Radius < 0)
- Radius = 0;
-
- // neuen Kreis zeichnen, wenn der alte
- // sichtbar ist
- if (vis) Show();
- };
-
- inline void Circle::Contract(int ContractBy)
- {
- // neuzeichnen mit (Radius - ContractBy)
- Expand(-ContractBy);
- };
-
- main() // die Funktionen testen
- {
- // das Grafik-System initialisieren
- int graphdriver = DETECT, graphmode;
- initgraph(&graphdriver, &graphmode,
- "..\\bgi");
-
- // ein Circle-Objekt definieren
- // und zeigen
- Circle MyCircle(100, 200, 50);
- MyCircle.Show();
- getch();
-
- // den Kreis verschieben (testet
- // Show und Hide ebenfalls)
- MyCircle.MoveTo(200, 250);
- getch();
-
- // vergrößern
- MyCircle.Expand(50);
- getch();
-
- // verkleinern
- MyCircle.Contract(75);
- getch();
-
- closegraph();
- return 0;
- }
-