CTLChart控件引用头文件CTLXYChart.h


CTLChart控件最主要头文件CTLXYChart代码如下:


#pragma once
#include "TLBase.h"
#include "TLChartTitle.h"
#include "TLChartAxis.h"
#include "TLChartStandardAxis.h"
#include "TLChartSerie.h"
#include "TLChartLegend.h"
#include "TLChartAnnotation.h"
#include <map>

using namespace std;

class CTLChartAxis;
class CTLChartTitle;
class CTLChartStandardAxis;
class CTLChartLineSerie;
class CTLChartImageSerie;
class CTLChartLegend;


/*窗口类名称*/
#define  TLXYCHART_CLASSNAME  _T("TLXYChartControl")
#define  GRAPH_MARGIN_CHART   5

#define  UM_SAVE_BITMAP           WM_USER + 81      /*保存图像*/
#define  UM_MANUAL_ZOOM           WM_USER + 82      /*左键框选放大*/
#define  UM_MANUAL_PAN            WM_USER + 83      /*左键曲线平移*/
#define  UM_LBDOWN_SELECT_PEAK    WM_USER + 84      /*左键选取极值*/
#define  UM_LBDOWN_SELECT_VALUE   WM_USER + 85      /*左键选取任意值*/

/*坐标轴方位*/
enum EAxisPos
{
 BottomAxis = 0,
 LeftAxis
};

typedef std::map<unsigned, CTLChartSerie*> TSeriesMap;
typedef TSeriesMap::const_iterator TSeriesMapIter;
typedef std::map<unsigned, CTLChartAnnotation*> TAnnotationMap;


class AFX_EXT_CLASS CTLXYChart : public CWnd, public CTLBase
{
 DECLARE_DYNAMIC(CTLXYChart)

public:
 CTLXYChart();
 virtual ~CTLXYChart();

protected:
 DECLARE_MESSAGE_MAP()

public:
 /*创建窗口*/
 BOOL Create(DWORD dwStyle, CRect &rect, CWnd* pParentWnd, UINT nID);
 /*设置图形区域大小*/
 void SetChartSize(CRect &rect, CWnd *pParentWnd);
 /*创建并连接标准轴*/
 CTLChartStandardAxis* CreateStandardAxis(EAxisPos axisPos);
 /*获取指向图形标题的指针*/
 CTLChartTitle* GetTitlePtr() const {return m_pTitle;}
 /*获取指向x轴的指针*/
 CTLChartAxis* GetXAxis() const {return m_pAxes[0];}
 /*获取指向y轴的指针*/
 CTLChartAxis* GetYAxis() const {return m_pAxes[1];}
 /*创建LineSerie*/
 CTLChartLineSerie* CreateLineSerie();
 /*创建imageSerie*/
 CTLChartImageSerie* CreateImageSerie();
 /*获取series数目,针对image类型返回0*/
 int GetSeriesCount();
 /*设置X轴名称*/
 void SetXLabel(LPCTSTR szLabel);
 /*设置Y轴名称*/
 void SetYLabel(LPCTSTR szLabel);
 /*获取绘图控件大小*/
 CRect GetPlottingRect() const {return m_PlottingRect;}
 /*获取图例指针*/
 CTLChartLegend* GetLegend() const {return m_pLegend;}
 /*判断是否为image*/
 bool IsImageChart() const {return m_bIsImage;}
 /**设置图形标题距离最顶端的边缘距离*/
 void SetTitleMagrinToTop(int nMargin) {m_nTilteMargin = nMargin;}

private:
 //注册“TLXYChartControl”窗口类
 BOOL RegisterWindowClass();
 /*绘制图形*/
 void DrawChart(CDC* pDC, CRect ChartRect);
 /*绘制图形区域背景*/
 void DrawPlotAreaBackGnd(CDC* pDC, CRect rect, COLORREF clr);
 /*连接轴到控件*/
 void AttachCustomAxis(CTLChartAxis* pAxis, EAxisPos axisPos);
 /*连接serie到控件*/
 void AttachCustomSerie(CTLChartSerie* pNewSeries);
 /*获取series中最大、最小值*/
 void GetSeriesMinMax(double &dXMin, double &dXMax, double &dYMin, double &dYMax);
 /*取消放大*/
 void UndoPanZoom();
 /*保存图片*/
 void SaveBitmapToFile(HBITMAP hBitmap, LPCTSTR lpFileName);
 /*获取最近的点坐标*/
 void GetNearestPoint(const CPoint& pt, bool bAnyOrPeak);
 /*移动调整点注释窗口的位置*/
 void MoveAnnotationPosition();
 /*获取map中指向第一个serie的迭代器*/
 void GoToFirstSerie();
    /*获取下一个迭代器所指向的serie指针;
 该函数需与GoToFirstSerie()函数配对使用,否则会出现异常*/
 CTLChartSerie* GetNextSerie();
 /*初始化坐标轴范围*/
 void InitialAxesMinMax();
 /*初始化图形控件*/
 void InitialChartConfiguration();
 /*初始化图形*/
 void InitializeChart();
 
private:
 /*图形标题距离最顶端的边缘距离,默认为20个像素*/
 int m_nTilteMargin;
 /*绘图区域大小*/
 CRect m_PlottingRect;
 /*X及Y轴指针*/
 CTLChartAxis* m_pAxes[2];
 /*指向图形标准的指针*/
 CTLChartTitle* m_pTitle;
 /*图形框架线型颜色*/
 COLORREF m_BorderColor;
 /*图形区域背景色*/
 COLORREF m_clrPlottingArea;
 /*图例指针*/
 CTLChartLegend* m_pLegend;
 /*Series 数目*/
 int m_nSerieCount;
 /*注释个数*/
 int m_nAnnotationCount; 
 /*series map*/
 TSeriesMap m_mapSeries; 
 TSeriesMapIter m_currentSeries;
 /*坐标值标注*/
 TAnnotationMap m_mapAnnotation; 
 /*坐标值标注字体*/
 CTLChartFont m_Annotationfont;
 bool m_bZoomEnabled;
 bool m_bLMouseDown;
 CRect m_rectZoomArea;
 COLORREF m_zoomRectColor;
 /*图形处于放大状态*/
 bool m_bZoomState; 
 double m_dXScreenMaxValue;
 double m_dXScreenMinValue;
 double m_dYScreenMaxValue;
 double m_dYScreenMinValue;
 bool m_bPanEnabled;
 bool m_bPanState;
 CPoint m_PanAnchor;
 bool m_bIsImage;
 bool m_bSelectEnabled;
 bool m_bSelectPeakEnabled;
 bool m_bSelectAnyEnabled;

public:
 afx_msg BOOL OnEraseBkgnd(CDC* pDC);
 afx_msg void OnSize(UINT nType, int cx, int cy);
 afx_msg void OnPaint();
 afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
 afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
 afx_msg void OnMouseMove(UINT nFlags, CPoint point);
 afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
 afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);

 afx_msg void OnEditCopy();
 afx_msg void OnSaveBitmap();
 afx_msg void OnManualZoom();
 afx_msg void OnManualPan();
 afx_msg void OnSelectPeak();
 afx_msg void OnSelectAnyPoint();

 afx_msg LRESULT OnDeleteTips(WPARAM wParam, LPARAM lParam);
 afx_msg LRESULT OnDeleteAllTips(WPARAM wParam, LPARAM lParam);
 afx_msg LRESULT OnMovePosSouthEast(WPARAM wParam, LPARAM lParam);
 afx_msg LRESULT OnMovePosNorthEast(WPARAM wParam, LPARAM lParam);
 afx_msg LRESULT OnMovePosSouthWest(WPARAM wParam, LPARAM lParam);
 afx_msg LRESULT OnMovePosNorthWest(WPARAM wParam, LPARAM lParam);
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值