⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 curve.h

📁 一个串口通信测试的例子
💻 H
字号:
#if !defined(AFX_CURVE_H__7812D789_40F5_4B40_A43D_47CE490FEBF9__INCLUDED_)
#define AFX_CURVE_H__7812D789_40F5_4B40_A43D_47CE490FEBF9__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// Curve.h : header file
//
/*************************************************************************
CRealView Class Version 1.00
CHistoryView Class Version 1.00
Author:luxintian
Company:南宁创能科技开发有限公司
Tel:13737075336
E-Mail:luxintian@sina.com
Date:2007-03-25
All right reserved.
说明:该模块是在之前的CRealCurveView和CHistoryCurveView的基础上作了适当的
修改,把实时视图和历史视图合并到一个Curve模块中,并修改了一些函数的接口
,增强了模块的通用性
2007年6月5日:
在CRealView::AddCurve函数添加了两个参数,可以在添加曲线时初始化曲线
改变了ChangeCurve函数使视图改变曲线时初始化曲线
2007年10月11日
在CRealView和CHistoryView添加了打印功能,为了节省打印成本,在打印中把原有的
黑底用白底来代替

使用方法:
1)直接使用,在添加头文件和LIB文件后可以在模板中直接用CRealView类名,(CHistoryView
类同)

2)继承使用(推荐),在添加头文件和LIB文件后,在向导所生成的工程中直接用CRealView
类名,并把工程中所有视图类的基类由原来的CView改为CRealView(CHistoryView类同)

CRealView的调用:首先调用AddCurve函数添加曲线,再StartRun启动曲线,在定时函数中调用InputValue函数
实时输入实时数据,如果是采用继承方式并添加了OnTimer函数和在该函数下调用InputValue
函数进行输入实时数据的可以不用调用StartRun函数
CHistoryView的调用,首先调用AddCurve函数添加曲线,再调用SetTimeRange函数设置
要显示的历史曲线的时间范围和最小时间间隔
*************************************************************************/
//////////////////////////////////////////////////////////////////////////
#include <afxtempl.h>		//模板支持
#include <deque>			//std::depue支持
#define ID_MENU_ORININ		5001	//原始模式
#define ID_MENU_VERDEFLATE	5002	//垂直缩小
#define ID_MENU_VERINFLATE	5003	//垂直放大
#define ID_MENU_HORDEFLATE	5004	//水平缩小
#define ID_MENU_HORINFLATE	5005	//水平放大
#define ID_MENU_VERUP		5006	//上移
#define ID_MENU_VERDOWN		5007	//下移
/////////////////////////////////////////////////////////////////////////////
// CRealView view

typedef std::deque<int> INTDEQUE;

//定义实时曲线状态结构
typedef struct tagREALSTATE
{
	tagREALSTATE(){dVerZoom=1.0;nHorPoint=600;nVerOffset=0;nHorOffset=0;}
	double  dVerZoom;		//垂直缩放比例
	int		nHorPoint;		//水平曲线点数
	int		nVerOffset;		//垂直偏移量
	int		nHorOffset;		//水平偏移量
} REALSTATE,*LPREALSTATE;
//定义历史曲线状态结构
typedef struct tagHISSTATE
{
	tagHISSTATE(){ dVerZoom=1.0; nVerOffset=0; nScrollPage=600; nScrollPos=0;}
	double  dVerZoom;		//垂直缩放比例
	int		nVerOffset;		//垂直偏移量
	int		nScrollPage;	//滚动页大小
	int		nScrollPos;		//滚动位置
} HISSTATE, *LPHISSTATE;

/////////////////////////////////////////////////////////////////////////////
// CRealView view

class AFX_EXT_CLASS CRealView : public CView
{
	//曲线信息结构
	typedef struct tagREALCURVEINFO
	{
		tagREALCURVEINFO(){strCaption=_T("");crCurve=0;dInValue=0.0;pptScr=NULL;bShow=TRUE;}
		CString		strCaption;	//曲线名称
		COLORREF	crCurve;	//曲线颜色
		double		dInValue;	//当前输入值
		INTDEQUE	CliDeque;	//保存数值点队列
		CPoint*		pptScr;		//保存屏幕曲线指针
		BOOL		bShow;		//是否显示该曲线
	} REALCURVEINFO,*LPREALCURVEINFO;

protected:
	CRealView();           // protected constructor used by dynamic creation
	DECLARE_DYNCREATE(CRealView)
	
// Operations
public:
	//////////////////////////////////////////////////////////////////////////
	//曲线属性

	//设置曲线标题(nIndex:曲线索引;strCaption:曲线标题)
	void SetCurveCaption(int nIndex,CString strCaption=_T(""));
	//获取曲线标题(nIndex:曲线索引;返回值:曲线标题)
	CString GetCurveCaption(int nIndex) const;
	//设置曲线颜色(nIndex:曲线索引;crCurve:曲线颜色)
	void SetCurveColor(int nIndex,COLORREF crCurve=0);
	//获取曲线颜色(nIndex:曲线索引;crCurve:曲线颜色)	
	COLORREF GetCurveColor(int nIndex) const;
	//设置曲线是否显示(nIndex:曲线索引;bShow:是否显示)
	void SetCurveShow(int nIndex,BOOL bShow=TRUE);
	//获取曲线是否显示(nIndex:曲线索引;返回值:是否显示)
	BOOL GetCurveShow(int nIndex) const;

	//////////////////////////////////////////////////////////////////////////
	//操作
	//插入曲线(strCaption:曲线标题;crCurve:曲线颜色;pInitData:初始化数据指针;nPointCount:初始化曲线数组点数;返回值:如果成功返回所插入曲线的索引,如果失败返回-1)
	int AddCurve(CString strCaption=_T(""),COLORREF crCurve=0,double* pInitData=NULL,int nPointCount=600);
	//删除曲线(nIndex:曲线索引)
	void DeleteCurve(int nIndex);
	//删除所有曲线
	void DeleteAllCurve();
	//改变曲线(nIndex:指定要改变的曲线的索引;nPointCount:初始化曲线数组点数;)
	void ChangeCurve(int nIndex,double* pNewData,int nPointCount=600);	
	//输入当前数值以显示(nIndex:曲线索引;dInValue:显示的数值)
	void InputValue(int nIndex,double dInValue);
	//开始运行(nElapse:时间间隔,即多长时间取值一次,单位毫秒)
	void StartRun(UINT nElapse=1000);
	//停止运行
	void StopRun();
	//原始模式
	void OnOrinin();
	//垂直缩小
	void OnVerDeflate();
	//垂直放大
	void OnVerInflate();
	//水平缩小
	void OnHorDeflate();
	//水平放大
	void OnHorInflate();
	//上移
	void OnVerUp();
	//下移
	void OnVerDown();
	
	//////////////////////////////////////////////////////////////////////////
	//视图属性

	//设置视图标题(strCaption:视图标题)
	void SetViewCaption(CString strCaption);
	//获取视图标题(返回值:视图标题)
	CString GetViewCaption() const {return m_strCaption;}
	//设置曲线状态(RS:曲线状态结构)
	void SetRealCurveState(REALSTATE RS);
	//获取曲线状态(lpRS:
	void GetRealCurveState(LPREALSTATE lpRS);
	//设置数值显示范围(dMin:最小值;dMax:最大值)
	void SetValueRange(double dMin,double dMax);
	//获取数值显示范围(dMin:最小值;dMax:最大值)
	void GetValueRange(double& dMin,double& dMax);


// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CRealView)
	public:
	virtual void OnInitialUpdate();
	protected:
	virtual void OnDraw(CDC* pDC);      // overridden to draw this view
	virtual void OnPrint(CDC* pDC, CPrintInfo* pInfo);
	//}}AFX_VIRTUAL

// Implementation
protected:
	virtual ~CRealView();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

	// Generated message map functions
protected:
	CArray<REALCURVEINFO,REALCURVEINFO&>	m_arCI;// 曲线信息数组

	CPoint		m_ptStart;			//线框的开始点
	CRect		m_rcFocus;			//线框区域矩形
	CRect		m_rcCurve;			//曲线区域
	CRect		m_rcPrint;			//打印区域
	//视图属性
	int			m_nMaxVal;			//最大显示数值
	int			m_nMinVal;			//最小显示数值
	int			m_nPointCount;		//显示最大曲线点数
	UINT		m_nElapse;			//触发时间间隔
	CString		m_strCaption;		//视图标题
	REALSTATE	m_RS;				//曲线状态
	
	//{{AFX_MSG(CRealView)
	afx_msg void OnTimer(UINT nIDEvent);
	afx_msg void OnDestroy();
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
	afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
	afx_msg void OnSize(UINT nType, int cx, int cy);
	afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
	afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
	afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

//////////////////////////////////////////////////////////////////////////
// CHistoryView view

class AFX_EXT_CLASS CHistoryView : public CView
{
	//定义历史曲线信息结构
	typedef struct tagHISCURVEINFO
	{
		tagHISCURVEINFO(){strCaption=_T("");crCurve=0;pptScr=NULL;nSizeScr=0;pPCli=NULL;nSizeCli=0;bShow=TRUE;}
		CString		strCaption;	//曲线名称
		COLORREF	crCurve;	//曲线颜色
		CPoint*		pptScr;		//保存屏幕曲线指针
		int			nSizeScr;	//保存屏幕曲线数组大小
		PFLOAT		pPCli;		//保存实际数值数组指针
		int			nSizeCli;	//保存实际数值数组大小
		BOOL		bShow;		//是否显示该曲线
	} HISCURVEINFO,*LPHISCURVEINFO;
	
protected:
	CHistoryView();           // protected constructor used by dynamic creation
	DECLARE_DYNCREATE(CHistoryView)

	void CalcScrollPos();
	
	
public:
	//////////////////////////////////////////////////////////////////////////
	//属性

	//设置曲线名称(nIndex:曲线索引;strCaption:曲线标题;)
	void SetCurveCaption(int nIndex,CString strCaption=_T(""));
	//获取曲线名称(返回曲线标题)
	CString GetCurveCaption(int nIndex) const;
	//设置曲线颜色(nIndex:曲线索引;crCurve:曲线颜色;)
	void SetCurveColor(int nIndex,COLORREF crCurve=0);
	//获取曲线颜色(返回曲线颜色)
	COLORREF GetCurveColor(int nIndex) const;
	//设置曲线是否显示nIndex:曲线索引;bShow:是否显示;)
	void SetCurveShow(int nIndex,BOOL bShow=TRUE);
	//获取曲线是否显示(返回是否显示)
	BOOL GetCurveShow(int nIndex) const;
	//设置输入值数组指针(nIndex:曲线索引;nSize:数组的大小)
	void SetInputValue(int nIndex,PFLOAT pValue,UINT nSize);
	
	//////////////////////////////////////////////////////////////////////////
	//操作

	//插入曲线(pValue:所要显示的值数组;nSize:数组的大小;strCaption:曲线标题;crCurve:曲线颜色;成功返回曲线索引,失败返回-1)
	int AddCurve(PFLOAT pValue,UINT nSize,CString strCaption=_T(""),COLORREF crCurve=0);
	//删除曲线(nIndex:曲线索引)
	void DeleteCurve(int nIndex);
	//删除所有曲线
	void DeleteAllCurve();
	
	//原始模式
	void OnOrinin();
	//垂直缩小
	void OnVerDeflate();
	//垂直放大
	void OnVerInflate();
	//水平缩小
	void OnHorDeflate();
	//水平放大
	void OnHorInflate();
	//上移
	void OnVerUp();
	//下移
	void OnVerDown();

	//////////////////////////////////////////////////////////////////////////
	//视图属性

	//设置视图标题(strCaption:曲线标题)
	void SetViewCaption(CString strCaption);
	//获取视图标题(返回曲线标题)
	CString GetViewCaption() const {return m_strCaption;}
	//设置曲线状态(pHS:曲线状结构指针)
	void SetHisCurveState(LPHISSTATE pHS);
	//获取曲线状态(pHS:曲线状结构指针)	
	void GetHisCurveState(LPHISSTATE pHS);
	//设置数值显示范围(dMin:最小值;dMax:最大值;)
	void SetValueRange(double dMin,double dMax);
	//获取数值显示范围(dMin:最小值;dMax:最大值;)	
	void GetValueRange(double& dMin,double& dMax);
	//设置显示历史曲线时间范围和最小时间间隔(tBegin:开始时间;tEnd:结束时间;dwMinUnit:最小时间间隔,单位为秒)
	void SetTimeRange(COleDateTime tBegin,COleDateTime tEnd,DWORD dwMinUnit);
	//获取显示历史曲线时间范围和最小时间间隔(tBegin:开始时间;tEnd:结束时间;dwMinUnit:最小时间间隔,单位为秒)
	void GetTimeRange(COleDateTime& tBegin,COleDateTime& tEnd,DWORD& dwMinUnit);
	
protected:
	CArray<HISCURVEINFO,HISCURVEINFO&>	m_arCI;//历史曲线信息数组
	HISSTATE		m_HS;				//历史曲线状态 
	double			m_dMaxVal;			//最大显示数值
	int				m_dMinVal;			//最小显示数值
	CString			m_strCaption;		//视图标题
	CRect			m_rcFocus;			//线框区域矩形
	CRect			m_rcCurve;			//曲线区域矩形
	CRect			m_rcPrint;			//打印区域矩形
	CPoint			m_ptStart;			//线框的开始点
	COleDateTime	m_tBegin;			//开始时间
	COleDateTime	m_tEnd;				//结束时间
	DWORD			m_dwUnit;			//最小时间单位
	DWORD			m_dwShowMode;		//Y轴数值显示方式
	CScrollBar		m_ScrollBar;		//滚动条
// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CHistoryView)
	public:
	virtual void OnInitialUpdate();     // first time after construct
	protected:
	virtual void OnDraw(CDC* pDC);      // overridden to draw this view
	virtual void OnPrint(CDC* pDC, CPrintInfo* pInfo);
	//}}AFX_VIRTUAL

// Implementation
protected:

	virtual ~CHistoryView();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

	// Generated message map functions
	//{{AFX_MSG(CHistoryView)
	afx_msg void OnSize(UINT nType, int cx, int cy);
	afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
	afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
	afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
	afx_msg void OnTimer(UINT nIDEvent);
	afx_msg void OnDestroy();
	afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
	afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_CURVE_H__7812D789_40F5_4B40_A43D_47CE490FEBF9__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -