📄 curve.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 + -