#pragma once
#include <afxmt.h>




#define	PLETH_WAVE_BUFF_LENGTH	(256*32)
// CECGWave

class CPlethWave : public CStatic
{
	DECLARE_DYNAMIC(CPlethWave)

public:
	static INT m_i32NormalWidth, m_i32NormalHeight;
	static INT m_i32BigWidth, m_i32BigHeight;
	static INT m_i32ECGWidth, m_i32ECGHeight;
	static INT m_i32TrendWidth, m_i32TrendHeight;

	static INT m_i32NormalX, m_i32NormalY;
	static INT m_i32BigX, m_i32BigY;
	static INT m_i32ECGX, m_i32ECGY;
	static INT m_i32TrendX, m_i32TrendY;
	CPlethWave(int Width, int Height, int LeadType);
	virtual ~CPlethWave();
	//设置波形的速度
	void Set_Speed(int speeed);
	//设置波形增益值
	void Set_Gain(int gain);
	//设置在屏幕上单位长度的像素点个数
	void Set_UnitLength_Pixel(int px);
	//设置波形的单位长度的数字量
	void Set_UnitLength_Value(int Value);
	//向缓冲区加入心电波形
	void Add_WaveDate(int date);
	//清除心电波形缓冲区的数据
	void Clear_WaveDate();

	//绘制心电波形
	void Draw_Wave();
	//波形显示区域 完全擦除
	void Erase();
	void Erase_Wave(int x);
	//复位 波形缓冲区的数据
	int Reset_WaveDataBuff();
	//波形数据 拷贝 到 缓冲区中
	void copy_data(INT16 *buf, int length);
	void copy_data(CPlethWave & RespWave);
	//设置 波形显示的模式 ，即波形显示区域的大小
	void Set_Style(INT style);
	//设置 是否 冻结 波形
	void Set_Freeze(INT f);
protected:
	afx_msg void OnPaint();
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
	afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
	DECLARE_MESSAGE_MAP()

private:
	INT  m_i32Width, m_i32Height;
	INT m_i32Style;
	CRect m_rectCtrl;			// 控件区域
	CRect m_rectValue;			// 显示数值区域
	CDC dcMem; //用于缓冲作图的内存DC 
	CDC dcMemGrid; //用于缓冲作图的内存DC 
	CBitmap bmp; //内存中承载临时图象的位图
	CBitmap bmpGrid; //内存中承载临时图象的位图


	int m_i32Speed;
	//波形增益
	int m_i32Gain;
	//在屏幕上单位长度的像素点个数
	int UnitLength_Pixel;
	//波形的单位长度的数字量
	int UnitLength_Value;
	int m_i32Freeze;
	//上次画图的ｘｙ轴坐标
	int m_i32LastX, m_i32LastY;
	int m_i32EraseFlag;

	//波形的保存的缓存区
	INT16 *m_i16WaveDate;
	int m_i32WaveDateW, m_i32WaveDateR, m_i32WaveDateLength;

	CCriticalSection m_CSWaveData;
	int m_u16TempX, m_u16TempEraseX, m_i32EraseLast;

	CPen *penRespLine;
	CPen *penErase;

	//CButton 
};


