home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung 2 / Power-Programmierung CD 2 (Tewi)(1994).iso / c / tcpp / examples / vcirc.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1990-06-09  |  2.5 KB  |  120 lines

  1. /* VCIRC.CPP - Beispiel aus Kapitel 5 der
  2.    Einführung */
  3.  
  4. // Klasse Circle aus Point abgeleitet
  5.  
  6. #include <graphics.h> // Deklaration der
  7.               // Grafik-Bibliothek
  8. #include "vpoint.h"   // Deklaration der Klassen
  9.               // Location und Point
  10. #include <conio.h>    // für Funktion getch()
  11.  
  12. // mit vpoint.obj und graphics.lib linken
  13.  
  14. class Circle : public Point
  15. {  // abgeleitet von der Klasse Point
  16.    // und von der Klasse Location
  17.  
  18.    int Radius;   // private voreingestellt
  19.  
  20. public:
  21.    Circle(int InitX, int InitY, int InitRadius);
  22.    void Show(void);
  23.    void Hide(void);
  24.    void Expand(int ExpandBy);
  25.    void Contract(int ContractBy);
  26. };
  27.  
  28. // Circle-Konstruktor ruft Point-Konstruktor
  29. // zuerst auf
  30. Circle::Circle(int InitX, int InitY,
  31.                int InitRadius)
  32.        : Point(InitX,InitY)
  33. {
  34.    Radius = InitRadius;
  35. };
  36.  
  37. void Circle::Show()
  38. {
  39.    Visible = true;
  40.  
  41.    // zeichnet Kreis mit BGI-Funktion
  42.    circle(X, Y, Radius);      
  43. }
  44.  
  45. void Circle::Hide()
  46. {
  47.    // verbergen nicht nötig
  48.    if (!Visible) return;
  49.  
  50.    // aktuelle Farbe speichern
  51.    unsigned int TempColor;
  52.  
  53.    // aktuelle Farben einstellen
  54.    //  Zeichenfarbe ist die Hintergrundfarbe
  55.    TempColor = getcolor();
  56.    setcolor(getbkcolor());
  57.  
  58.    // mit der Hintergrundfarbe löschen
  59.    Visible = false;
  60.    circle(X, Y, Radius);
  61.  
  62.    // auf die aktuelle Farbe zurücksetzen
  63.    setcolor(TempColor);       
  64. };
  65.  
  66. void Circle::Expand(int ExpandBy)
  67. {
  68.    // ist der aktuelle Kreis sichtbar?
  69.    //  wenn ja, verbergen
  70.    Boolean vis = Visible;
  71.    if (vis) Hide();
  72.  
  73.    // Radius vergrößern
  74.    Radius += ExpandBy;
  75.  
  76.    // negativen Radius vermeiden
  77.    if (Radius < 0)        
  78.       Radius = 0;
  79.  
  80.    // neuen Kreis zeichnen, wenn der alte
  81.    // sichtbar ist
  82.    if (vis) Show();
  83. };
  84.  
  85. inline void Circle::Contract(int ContractBy)
  86. {
  87.    // neuzeichnen mit (Radius - ContractBy)
  88.    Expand(-ContractBy);
  89. };
  90.  
  91. main()    // die Funktionen testen
  92. {
  93.    // das Grafik-System initialisieren
  94.    int graphdriver = DETECT, graphmode;
  95.    initgraph(&graphdriver, &graphmode,
  96.              "..\\bgi");
  97.  
  98.    // ein Circle-Objekt definieren
  99.    // und zeigen
  100.    Circle MyCircle(100, 200, 50);
  101.    MyCircle.Show();
  102.    getch();
  103.  
  104.    // den Kreis verschieben (testet
  105.    // Show und Hide ebenfalls)
  106.    MyCircle.MoveTo(200, 250);
  107.    getch();
  108.  
  109.    // vergrößern
  110.    MyCircle.Expand(50);             
  111.    getch();
  112.  
  113.    // verkleinern
  114.    MyCircle.Contract(75);           
  115.    getch();
  116.  
  117.    closegraph();
  118.    return 0;
  119. }
  120.