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

📄 realtime.h

📁 一个多线程的网络数据采集系统(客户端)
💻 H
📖 第 1 页 / 共 2 页
字号:
#pragma once

#define  PiV     3.14159265358979324                       
#define  ConstV  180

/**
*	采样数据结构
**/
struct SPLINEDATA
{
	double value;//采样值
//    bool flag;//采样间隔有效标志
//	CFLAG flag;//采样间隔标志
//	DWORD interval;//采样间隔或采样时间		 
};

/**
* 样条曲线类
* @类功能说明
*   定义了一条曲线(包括它的数据及数据性质和显示方式)
**/
class CALine : public CObject
{
private:	
public:
	/**
	*	曲线的采样间隔
	**/
	DWORD m_nInterval;
	/**
	*   曲线的显示颜色
	**/
	COLORREF m_nColor;
	/**
	*   曲线的风格,比如实线、虚线等(如PS_SOLID, PS_DASH, PS_DOT等)
	**/
	int	m_nLineStyle;
	/**
	*   曲线的线宽
	**/
	int	m_nLineWidth;
	/**
	*	采样数据数组
	**/
	CArray<SPLINEDATA, SPLINEDATA&> m_value;
	/**
	*	当前采样值
	**/
	double m_dNowValue;
	/**
	*	曲线的名字
	**/
	CString	m_sName;
	/**
	*	曲线的描述信息
	**/
	CString	m_sDescription;
	/**
	*	曲线中各采样点对应的Y坐标值单位
	**/
	CString	m_sUnit;
	/**
	*	曲线中各采样点对应的Y坐标值的最小值?
	**/
	double m_dMin;
	/**
	*	曲线中各采样点对应的Y坐标值的最大值?
	**/
	double m_dMax;
	/**
	*	曲线中各采样点对应的Y坐标值范围下限
	**/
	double m_dScaleLow;
	/**
	*	曲线中各采样点对应的Y坐标值范围上限
	**/
	double m_dScaleHigh;
	// Operation
public:
	/**
    *   CALine类构造函数
    **/
	CALine();
	/**
    *   CALine类析构函数
    **/
	virtual ~CALine(){}
	/**
	*	向曲线添加的采样点(此处为向mwYValues中加入采样点Y坐标值)
	**/
	void AddValue(SPLINEDATA value);
    /**
	*	重载[]操作符以检索采样数据
	**/
    CALine& operator=(CALine &cLine)
	{
		if(this !=&cLine)
		{
			m_nInterval = cLine.m_nInterval;
			m_nColor = cLine.m_nColor;
			m_nLineStyle = cLine.m_nLineStyle;
			m_nLineWidth = cLine.m_nLineWidth;
			m_sName = cLine.m_sName;
			m_sDescription = cLine.m_sDescription;
			m_sUnit = cLine.m_sUnit;
			m_dMax = cLine.m_dMax;
			m_dMin = cLine.m_dMin;
			m_dScaleLow = cLine.m_dScaleLow;
			m_dScaleHigh = cLine.m_dScaleHigh;
			int nCount = (int)(cLine.m_value.GetCount());
			m_value.RemoveAll();
			for(int i = 0; i < nCount; i++)m_value.Add(cLine.m_value[i]);
		}
        return *this;
	}
	/**
	*	重载[]操作符以检索采样数据
	**/
    SPLINEDATA operator[](int n)
	{
		ASSERT(n >= 0 && n < m_value.GetSize());
		return m_value[n];
	}

	/**
	*	设置曲线中制定采样点的值
	**/
	void SetValue(int nIndex, double value)
	{
        ASSERT(nIndex >= 0 && nIndex < m_value.GetSize());
		SPLINEDATA dv = m_value[nIndex];
		dv.value = value;
		m_value.SetAt(nIndex, dv);
	}
	/**
	*	设置曲线的显示颜色
	**/
	void SetLineColor(COLORREF cr){ m_nColor = cr; }
	/**
	*	获取曲线的显示颜色
	**/
	COLORREF GetLineColor(){ return m_nColor; }
	/**
	*	设置曲线的风格
	**/
	void SetLineStyle(int ls){ m_nLineStyle = ls; }
	/**
	*	获取曲线的风格
	**/
	int  GetLineStyle(){ return m_nLineStyle; }
	/**
	*	设置曲线的线宽
	**/
	void SetLineWidth(int wd){ m_nLineWidth = wd; }
	/**
	*	获取曲线的线宽
	**/
	int  GetLineWidth(){ return m_nLineWidth; }
	/**
	*	设置曲线的名字
	**/
	void SetLineName(char* name){ m_sName = name; }
	/**
	*	获取曲线的名字
	**/
	const char* GetLineName(){ return m_sName; }
	/**
	*	设置曲线的描述信息
	**/
	void SetLineDescription(char* desc){ m_sDescription = desc; }
	/**
	*	获取曲线的描述信息
	**/
	const char* GetLineDescription(){ return m_sDescription; }
	/**
	*	设置曲线中各点对应采样值的单位
	**/
	void SetLineUnit(char* unit){ m_sUnit = unit; }
	/**
	*	获取曲线中各采样点对应的Y坐标值单位
	**/
	const char* GetLineUnit(){ return m_sUnit; }
	/**
	*	设置曲线中各采样点对应的Y坐标值的最小值?
	**/
	void SetLineMinValue(double min){ m_dMin = min; }
	/**
	*	获取曲线中各采样点对应的Y坐标值的最小值?
	**/
	double GetLineMinValue(){ return m_dMin; }
	/**
	*	设置曲线中各采样点对应的Y坐标值的最大值?
	**/
	void SetLineMaxValue(double max){ m_dMax = max; }
	/**
	*	获取曲线中各采样点对应的Y坐标值的最大值?
	**/
	double GetLineMaxValue(){ return m_dMax; }
	/**
	*   设置曲线中各采样点对应的Y坐标值范围下限
	**/
	void SetLineScaleLow(double low){ m_dScaleLow = low; }
	/**
	*	获取曲线中各采样点对应的Y坐标值范围下限
	**/
	double GetLineScaleLow(){ return m_dScaleLow; }
	/**
	*	设置曲线中各采样点对应的Y坐标值范围上限
	**/
	void SetLineScaleHigh(double high){ m_dScaleHigh = high; }
	/**
	*	获取曲线中各采样点对应的Y坐标值范围上限
	**/
	double GetLineScaleHigh(){ return m_dScaleHigh; }
	/**
	*	获取曲线中采样点的个数
	**/
	int GetCounter(){ return (int)m_value.GetSize(); }
};

class CRealTime {
public:
	/**
	*	CRealTime构造函数
	**/
    CRealTime();
private:
	/**
	*	曲线图中当前可编辑曲线索引
	**/
	int nEditLIndex;
	/**
	*	曲线图中当前可编辑曲线中被编辑点索引
	**/
	int nEditPIndex;
protected:
	//**********************************设备环境**********************************************
    /**
    *   辅助图的设备环境
    **/
    CDC m_dc;
	//**********************************绘制区信息**********************************************
	/**
	*	曲线图绘制区与曲线图客户区的比例信息结构
	*	xmin:曲线图绘制区最左侧与曲线图客户区最左侧的距离占曲线图客户区宽度的比率
	*	ymin:曲线图绘制区最上侧与曲线图客户区最上侧的距离占曲线图客户区高度的比率
	*	xmax:曲线图绘制区最右侧与曲线图客户区最左侧的距离占曲线图客户区宽度的比率
	*	ymax:曲线图绘制区最下侧与曲线图客户区最上侧的距离占曲线图客户区高度的比率
	**/
	struct CRatio{ double xmin, ymin, xmax, ymax; };
	/**
	*	曲线图绘制区与曲线图客户区的比例信息
	**/
	CRatio m_ratio;
public:
	/**
	*	曲线图客户区矩形
	**/
	CRect m_clientRect;
	/**
	*	曲线图绘制区矩形
	**/
	CRect m_drawRect;
	/**
	*	曲线图坐标平面区最左侧与曲线图绘制区最左侧的距离(逻辑单位)
	**/
	int m_lM;
	/**
	*	曲线图坐标平面区最右侧与曲线图绘制区最右侧的距离(逻辑单位)
	**/
	int m_rM;
	/**
	*	曲线图坐标平面区最上侧与曲线图绘制区最上侧的距离(逻辑单位)
	**/
	int m_tM;
	/**
	*	曲线图坐标平面区最下侧与曲线图绘制区最下侧的距离(逻辑单位)
	**/
	int m_bM;
    /**
	*	曲线图坐标平面(不包含坐标轴)区矩形
	**/
	CRect m_plotRect;
protected:
	/**
    *	关于辅助图整个区域的矩形
	**/
	CRect m_assistRect;
	/**
	*	辅助图中关于坐标平面的前半部矩形
	**/
    CRect m_assistRect1;
	/**
	*	辅助图中关于坐标平面的后半部矩形
	**/
    CRect m_assistRect2;
	/**
	*	辅助图中坐标平面左侧区域(含y轴及刻度值、y轴标题)的矩形
	**/
	CRect m_assistLRect;
	/**
	*	辅助图中坐标平面右侧区域(含右侧y轴及刻度值、曲线说明信息)的矩形
	**/
	CRect m_assistRRect;
	/**
	*	辅助图中坐标平面上方区域(含曲线图标题)的矩形
	**/
    CRect m_assistTRect;
	/**
	*	辅助图中坐标平面下方区域(含X轴刻度、刻度值、标题、游标时间、总采样时间)的矩形
	**/
	CRect m_assistBRect;
	//**********************************GDI对象**********************************************
	/**
	*	辅助图所对应的位图
	**/
	CBitmap m_bmp;
	/**
	*	字体高度参考值
	**/
	int m_nSize;
	/**
	*	逻辑字体信息
	**/
	LOGFONT m_logFont;
    //**********************************颜色与排列方式**********************************************
	/**
	*	曲线图背景颜色
	**/
	COLORREF m_nBkColor;
	/**
	*	曲线图网格颜色
	**/
	COLORREF m_nGridColor;
	/**
	*	曲线图坐标平面边框颜色(坐标轴)
	**/
	COLORREF m_nBorderColor;
	/**
	*	曲线图刻度值颜色
	**/
	COLORREF m_nTickColor;
	/**
	*	曲线图标题(包括坐标轴标题)颜色
	**/
	COLORREF m_nTitleColor;
	/**
	*	曲线图边框颜色
	**/
	COLORREF m_nBoundaryColor;
	/**
	*	排列方式类型
	**/
	enum CTextAlign	{ LEFT, CENTER, RIGHT, TOP, BOTTOM };
	/**
	*	字符串排列方式信息结构
	*	(HAlign:水平排列方式,VAlign:垂直排列方式)
	**/
	struct StringAlign{ CTextAlign HAlign, VAlign; };
	/**
	*	字符串排列方式信息
	**/
	StringAlign m_strAlign;
	//**********************************绘制行为标志**********************************************
	/**
	*	初始设置失败标志
	**/
	bool m_bSetingFailed;
public:
	/**
	*	曲线图绘制准备标志
	**/
	bool m_bPrepared;
	/**
    *   曲线图实时绘制标志
    **/
    bool m_bRealTime;
protected:
    /**
    *   曲线图向前滚动标志
    **/
    bool m_bForward;
    /**
    *   曲线图中的鼠标定位标志(实时绘制时不能进行鼠标定位)
    **/
    bool m_bCursorlineFlag;
    //**********************************坐标系及时间信息**********************************************
	/**
	*	采样时间间隔
	*	(当前采样值与前一采样值得采样时间间隔)
	**/
	DWORD m_nTimeInterval;
	/**
	*	曲线图中当前页最右端在辅助图中对应的X坐标(相对于m_assistRect1最左端)
	**/
	int m_X;
    /**
	*	曲线图中采样值对应的最晚时间
	*	(初始采样值对应时间设为0)
	**/
	DWORD m_nCursorTime;
	/**
    *   曲线图中采样总时间
	*	
    **/
    DWORD m_nMaxTime;
	/**
	*	曲线图中采样点对应的最小采样值
	**/
	double m_dTotalYMin;
	/**
	*	曲线图中采样点对应的最大采样值
	**/
	double m_dTotalYMax;
    /**
	*	坐标轴刻度信息结构
	*	(dx:水平方向上每一逻辑单位所对应的x值的变化范围,
	*	  dy:垂直方向上每一逻辑单位所对应的y值的变化范围,
	*	  xmin:当前显示页中X轴最小刻度值,
	*	  xmax:当前显示页中X轴最大刻度值,
	*	  ymin:当前显示页中Y轴最小刻度值,
	*	  ymax:当前显示页中Y轴最大刻度值)
	**/
	struct CScale{ double dx, dy, xmin, ymin, xmax, ymax; };
	/**
	*	坐标轴刻度信息(详情见CRealTime::CScale结构)
	**/
	CScale m_scale;
	/**
    *   曲线图中时间轴上每秒对应的刻度数
    **/
    double m_nCyclesPerSec;

⌨️ 快捷键说明

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