High-speed-Charting-Control/ChartDemo/ChartCtrl/ChartLineSerie.h

115 lines
3.3 KiB
C++

/*
*
* ChartLineSerie.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_CHARTLINESERIE_H__792C2F20_9650_42FA_B13D_E63911C98CE5__INCLUDED_)
#define AFX_CHARTLINESERIE_H__792C2F20_9650_42FA_B13D_E63911C98CE5__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "ChartXYSerie.h"
//! Specialization of a CChartSerie to display a line series.
/**
The data points are connected by line segments. The curve can also
be smoothed.
**/
class CChartLineSerie : public CChartXYSerie
{
public:
//! Returns the pen style (plain, dashed, dotted, ...)
/**
For a list of pen styles available, see the CreatePen function in MSDN.
**/
int GetPenStyle() const { return m_iPenStyle; }
//! Sets the pen style (plain, dashed, dotted, ...)
/**
For a list of pen styles available, see the CreatePen function in MSDN.
**/
void SetPenStyle(int NewStyle);
//! Returns the pen width
int GetWidth() const { return m_iLineWidth; }
//! Sets the pen width
void SetWidth(int PenWidth);
//! Enables the smoothing of the curve (slower).
void SetSmooth(bool bSmooth);
//! Constructor
CChartLineSerie(CChartCtrl* pParent);
//! Destructor
virtual ~CChartLineSerie();
//! Check whether a screen point is on the series.
/**
This function returns true if the screen point is close to a line segment.
If the screen point is also close to a specific point of the series, the
index of the point is stored in the uIndex parameter. Otherwise, this
parameter contains INVALID_POINT.
@param screenPoint
The screen point to test
@param uIndex
If the point is close to a specific point of the series, its index is stored here.
@return true if the point is on the series
**/
bool IsPointOnSerie(const CPoint& screenPoint, unsigned& uIndex) const;
private:
//! Draws the legend icon for the series.
/**
@param pDC
The device context used to draw
@param rectBitmap
The rectangle in which to draw the legend icon
**/
void DrawLegend(CDC* pDC, const CRect& rectBitmap) const;
//! Draws the most recent points of the series.
/**
This function should only draw the points that were not previously
drawn.
@param pDC
The device context used to draw
**/
void Draw(CDC* pDC);
//! Redraws the full series.
/**
@param pDC
The device context used to draw
**/
void DrawAll(CDC *pDC);
//! Checks whether a point is close to a line segment
bool IsNearLine(long Axl, long Ayl,long Bxl,
long Byl, long Cxl, long Cyl) const;
//! The pen width
int m_iLineWidth;
//! The pen style
int m_iPenStyle;
//! Specifies if the curve is smoothed
bool m_bSmooth;
};
#endif // !defined(AFX_CHARTLINESERIE_H__792C2F20_9650_42FA_B13D_E63911C98CE5__INCLUDED_)