home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / tcpp / examples / circle.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1990-06-10  |  2.6 KB  |  125 lines

  1. /* CIRCLE.CPP - Beispiel aus Kapitel 5 der
  2.    Einführung */
  3.  
  4. // Eine abgeleitete Kreisklasse
  5.  
  6. #include <graphics.h> // Grafik-Deklarationen
  7. #include "point.h"    // Deklarationen der Klassen
  8.                       //  Point und Location
  9. #include <conio.h>    // für die Funktion getch()
  10.  
  11. // Mit point2.obj und graphics.lib linken
  12.  
  13. class Circle : public Point
  14. {   // privat abgeleitet aus der Klasse Point,
  15.     //  letztendlich aus der Klasse Location
  16.  
  17.    int Radius;  // Privat, voreingestellt
  18.  
  19.   public:
  20.    Circle(int InitX, int InitY, int InitRadius);
  21.    void Show(void);
  22.    void Hide(void);
  23.    void Expand(int ExpandBy);
  24.    void MoveTo(int NewX, int NewY);
  25.    void Contract(int ContractBy);
  26. };
  27.  
  28. Circle::Circle(int InitX,
  29.                int InitY,
  30.            int InitRadius)
  31.            : Point(InitX,InitY)
  32. {
  33.    Radius = InitRadius;
  34. };
  35.  
  36. void Circle::Show(void)
  37. {
  38.    Visible = true;
  39.  
  40.    // den Kreis zeichnen
  41.    circle(X, Y, Radius);
  42. }
  43.  
  44. void Circle::Hide(void)
  45. {
  46.    // aktuelle Fabe speichern
  47.    unsigned int TempColor;
  48.  
  49.    // mit der aktuellen Farbe initialisieren
  50.    TempColor = getcolor();
  51.  
  52.    // Zeichenfarbe des Hintergrundes initialisieren
  53.    setcolor(getbkcolor()); 
  54.    Visible = false;
  55.  
  56.    // zum Löschen in der Hintergrundfarbe zeichnen
  57.    circle(X, Y, Radius);
  58.  
  59.    // Farbe auf die aktuelle Farbe zurücksetzen
  60.    setcolor(TempColor);    
  61. };
  62.  
  63. void Circle::Expand(int ExpandBy)
  64. {
  65.    // alten Kreis löschen
  66.    Hide();
  67.  
  68.    // Radius vergrößern
  69.    Radius += ExpandBy;
  70.  
  71.    // negativen Radius vermeiden
  72.    if (Radius < 0)               
  73.       Radius = 0;
  74.  
  75.    // neuen Kreis zeichnen
  76.    Show();                       
  77. };
  78.  
  79. void Circle::Contract(int ContractBy)
  80. {
  81.    // Neuzeichnen mit (Radius - ContractBy)
  82.    Expand(-ContractBy);
  83. };
  84.  
  85. void Circle::MoveTo(int NewX, int NewY)
  86. {
  87.    // alten Kreis löschen
  88.    Hide();
  89.  
  90.    // neue Koordinaten festlegen
  91.    X = NewX;                  
  92.    Y = NewY;
  93.  
  94.    // auf der neuen Position zeichnen
  95.    Show();                    
  96. };
  97.  
  98. main()     // Funktionen testen
  99. {
  100.    // Initialisieren des Grafiksystems
  101.    int graphdriver = DETECT, graphmode;
  102.    initgraph(&graphdriver, &graphmode,
  103.              "..\\bgi");
  104.  
  105.    // ein Kreis-Objekt definieren und anzeigen
  106.    Circle MyCircle(100, 200, 50);
  107.    MyCircle.Show();
  108.    getch();
  109.  
  110.    // den Kreis bewegen (testet ebenso
  111.    // Hide und Show)
  112.    MyCircle.MoveTo(200, 250);
  113.    getch();
  114.  
  115.    // vergrößern
  116.    MyCircle.Expand(50);             
  117.    getch();
  118.  
  119.    // verkleinern
  120.    MyCircle.Contract(75);           
  121.    getch();
  122.    closegraph();
  123.    return 0;
  124. }
  125.