Click here to Skip to main content
15,885,985 members
Articles / Desktop Programming / MFC

High-speed Charting Control

Rate me:
Please Sign up or sign in to vote.
4.95/5 (327 votes)
13 Jul 2010CPOL35 min read 4.2M   100.5K   787  
A flexible charting control to display 2D data
/*
 *
 *	ChartTitle.h
 *
 *	Written by C�dric Moonen (cedric_moonen@hotmail.com)
 *
 *
 *
 *	This code may be used for any non-commercial and commercial purposes in a compiled form.
 *	The code may be redistributed as long as it remains unmodified and providing that the 
 *	author name and this disclaimer remain intact. The sources can be modified WITH the author 
 *	consent only.
 *	
 *	This code is provided without any garanties. I cannot be held responsible for the damage or
 *	the loss of time it causes. Use it at your own risks
 *
 *	An e-mail to notify me that you are using this code is appreciated also.
 *
 *
 */

#if !defined(AFX_CHARTTITLE_H__49972787_6D28_4F81_A12F_420947456913__INCLUDED_)
#define AFX_CHARTTITLE_H__49972787_6D28_4F81_A12F_420947456913__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <vector>
#include <map>
#include "ChartString.h"
#include "ChartFont.h"

class CChartCtrl;

//! This class is responsible for the titles displayed on the control.
/**
	Several lines can be displayed in the title, each one possibly with
	its own font. It is retrieved by calling the GetTitle() function 
	from the CChartCtrl class. 
**/
class CChartTitle  
{
	friend CChartCtrl;

public:
	//! Returns the number of lines in the title.
	size_t GetStringCount() const;
	//! Returns a specific line, specified by its index.
	TChartString GetString(size_t Index) const;
	//! Adds a new line to the title.
	void AddString(const TChartString& NewString);
	//! Removes all the lines displayed in the title.
	void RemoveAll();

	//! Sets the default font.
	/**
		@param iPointSize
			The font point size.
		@param strFaceName
			The font face name ("Times New Roman", "Arial", ...)
	**/
	void SetFont(int iPointSize, const TChartString& strFaceName);
	//! Sets the default font.
	/**
		This function allows to set extended font style by passing
		a CChartFont object.
		@param newFont
			The new font.
	**/
	void SetFont(const CChartFont& newFont);
	//! Sets the font for a specific line.
	/**
		@param iLineIndex
			The index of the line to set the font.
		@param iPointSize
			The font point size.
		@param strFaceName
			The font face name ("Times New Roman", "Arial", ...)
	**/	
	void SetLineFont(int iLineIndex, int iPointSize, const TChartString& strFaceName);
	//! Sets the font for a specific line.
	/**
		This function allows to set extended font style by passing
		a CChartFont object.
		@param iLineIndex
			The index of the line to set the font.
		@param newFont
			The new font.
	**/
	void SetLineFont(int iLineIndex, const CChartFont& newFont);

	//! Shows/hides the title.
	void SetVisible(bool bVisible) { m_bIsVisible = bVisible; }
	//! Returns true if the title is visible.
	bool IsVisible()  const         { return m_bIsVisible; }

	//! Returns the text color.
	COLORREF GetColor() const			   { return m_TextColor; }
	//! Sets the text color.
	void SetColor(COLORREF NewColor);

	//! Returns true if a screen point is in the region of the title.
	BOOL IsPointInside(const CPoint& screenPoint) const;

private:
	//! Constructor
	CChartTitle(CChartCtrl* pParent);
	//! Destructor
	virtual ~CChartTitle();

	//! Sets the rectangle in which to display the title.
	void SetTitleRect(const CRect& newRect)  { m_TitleRect = newRect; }
	//! Returns the size of the title lines.
	CSize GetSize(CDC* pDC);
	//! Draw the title.
	void Draw(CDC *pDC);

	//! The parent charting control.
	CChartCtrl* m_pParentCtrl;
	//! Vector containing all strings to display.
	std::vector<TChartString> m_StringArray;
	//! Map containing all the fonts used for the title lines.
	std::map<int, CChartFont> m_mapLineFonts;

	//! Specifies if the title is visible.
	bool m_bIsVisible;
	//! The default font used to draw the titles.
	CChartFont m_DefaultFont;
	//! The text color.
	COLORREF m_TextColor;
	//! The rectangle in which to draw the titles.
	CRect m_TitleRect;
};

#endif // !defined(AFX_CHARTTITLE_H__49972787_6D28_4F81_A12F_420947456913__INCLUDED_)

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Engineer
Belgium Belgium
I am a 29 years old guy and I live with my girlfriend in Hoegaarden, little city from Belgium well known for its white beer Smile | :) .
I studied as an industrial engineer in electronics but I oriented myself more towards software development when I started to work.
Currently I am working in a research centre in mechatronica. I mainly develop in C++ but I also do a bit of Java.
When I have so spare time, I like to read (mainly fantasy) and play electric guitar.

Comments and Discussions