|
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
|