Programmieren mit C++

Code-Beispiele & Lösungen

Allgemeine visuelle Objektklassen

Kuchendiagramme darstellen

Die von CWnd abgeleitete Klasse CPieChartCtrl leistet das Zeichnen von Kuchendiagrammen – im englischen als „pie chart“ bezeichnet – mit Überschrift.

Die Konstruktion der einzelnen Kuchenstücke erfolgt über eine Methode, die ihrerseits ein Objekt zur Beschreibung des Kuchenstücks erzeugt und dieses in einem Array ablegt.

CPieChartPiece beschreibt jeweils ein Segment mit seinen Attributen.

class CPieChartPiece : public CObject
{
  public:
    CPieChartPiece();
 
    COLORREF  m_colorBack;
    COLORREF  m_colorText;
    CBrush    m_brushBack; 
    int       m_nAngle;
    CString   m_strInfo;
};

Die Attribute eines Kuchenstücks sind:

Member

Bedeutung

m_colorBack

Hintergrundfarbe

m_colorText

Farbe für Textausgabe auf dem Segment

m_brushBack

Pinsel für den Hintergrund

m_Angle

Winkel als Bruchstück von 360 zur Definition der Größe

m_strInfo

Text, der auf dem Segment angezeigt werden soll

Das zugehörige Array zur Verwaltung der einzelnen Stücke lautet:

typedef CTypedPtrArray  
            CChartPieceArray;

Klasse CPieChartPiece

CPieChartCtrl ();

Der Konstruktor der Klasse CPieChartCtrl benötigt keine Parameter. Er erzeugt eine Instanz der Klasse und initialisiert interne Member wie folgt:

Member

Defaultwert

Startwinkel

0

Linienfarbe

schwarz, RGB(0,0,0)

Füllfarbe

blau, RGB(0,0,255)

Titel

Leerer String

Titelschrift

Arial, 15, normal

Infoschrift

Arial, 13, normal

Konstruktor CPieChartCtrl

int m_nStartAngle;

Das Member m_StartAngle gibt den Anfangspunkt des ersten Segments vor. Per Default ist dies 0 Grad. Mögliche Werte laufen von 0 bis 359. 360 wäre 0 und ist nicht erlaubt.

Member m_StartAngle

COLORREF m_colorLine;

m_colorLine beschreibt die Farbe, mit der Linien gezeichnet werden.

Member m_colorLine

COLORREF m_colorDefault;

Mit m_colorDefault wird die Vorgabefarbe für das Füllen der Segmente spezifiziert. Diese Farbe kann jedoch überschrieben werden.

Member m_colorDefault

CChartPieceArray m_chartPieces;

m_chartPieces nimmt das Array der Segmente auf. Der Zugriff ist über Index möglich.

Die Anzahl der Elemente des Arrays erhält man durch den nachfolgenden Aufruf:

int nCount = m_chartPieces.GetSize();

Die Klasse selbst führt kein Member, das die Anzahl der Segmente speichert, sondern fragt diese bei Bedarf über den gezeigten Aufruf ab.

Member m_chartPieces

int m_nTitleHeight;

m_nTitleHeight ist ein Informationsmember, das die Höhe des Titels in Bildpunkten enthält. Zugewiesen wird diese Höhe durch die Funktion RecalcRect(), die das umhüllende Rechteck des Diagramms neu ermittelt und im Rahmen dieser Berechnungen auch die tatsächliche Höhe des Titels anhand des gesetzten Fonts dem Member m_nTitleHeight zuweist.

Member m_nTitleHeight

CFont m_fontTitle;

Das Member m_fontTitle speichert den Font, mit dem der Titel des Diagramms geschrieben wird.

Member m_fontTitle

CFont m_fontInfo;

m_fontInfo definiert die Schrift für die Information, die auf den einzelnen Segmenten optional angezeigt werden kann. Diese Schrift ist für alle Segmente gleich.

Member m_fontInfo

CString m_strTitle;

Das Member m_strTitle speichert den Text, der als Überschrift des Diagramms anzuzeigen ist.

Member m_strTitle

void SetTitle(const CString& str);

Die Methode SetTitle() weist dem Diagramm einen neuen Titeltext zu.

Methode SetTitle

void Reset();

Über Reset() können alle definierten Segmente gelöscht werden. Die Attribute des Diagramms als solches bleiben jedoch unverändert.

Methode Reset

void GetItemColor(int i, COLORREF& color);

Die Methode GetItemColor() liefert die Farbe des Segments mit dem Index i. Ist i größer als die Anzahl der Segmente, wird i auf das letzte Segment gesetzt. Die Farbe, die in color returniert wird, entspricht der Hintergrundfarbe des Segments.

Methode GetItemColor

BOOL AddPiece(COLORREF colorBack, 
              COLORREF colorText, 
              int      nAngle, 
              const CString& str = _T(""));

Mittels AddPiece() werden neue Segmente zu den bestehenden hinzugefügt. Die Attribute des Segments werden in den Parametern übergeben, wobei die Methode selbständig den Pinsel für die Hintergrundfarbe über einen Aufruf von CreateSolidBrush() erzeugt.

Methode AddPiece





Sachgebiet


© 2009-2012 by Alojado Publishing. Alle Rechte vorbehalten. Ausgewiesene Marken gehören ihren jeweiligen Eigentümern.
Mit der Benutzung dieser Seite erkennen Sie die Nutzungsbedingungen und die Datenschutzerklärung an. Der Betreiber übernimmt keine Haftung für den Inhalt verlinkter externer Internetseiten.
Seite erzeugt 2012-05-20 02:30:19 von textarchiv.alojado.de