www.pudn.com > hmmPlatform.rar > WaveDisplay.h


#ifndef _CWAVEDISPLAY_H 
#define _CWAVEDISPLAY_H 
 
////////////////////////////////////////////////////////////////////////// 
// class CWaveDisplay 
// 
// 功能:	实现数据的在GUI上的显示 
// 创建人:	陈文凯 (chwkai@gmail.com) 
// 创建日期:2005年5月19日 
// 修改人: 
// 修改日期: 
// 版本 
 
#include "afxwin.h" 
 
////////////////////////////////////////////////////////////////////////// 
// 定义缓冲区数据结构 
typedef struct _displayChunk 
{ 
	double* lpData;					// 数据内容 
	unsigned int nSize;			// 数据长度 
	unsigned int nDataReaded;		// 已经输出的数据长度 
	_displayChunk* lpNext;			// 指向下一个缓冲快 
 
} DisplayChunk, *PDisplayChunk; 
 
////////////////////////////////////////////////////////////////////////// 
// 音频数据显示 
class CWaveDisplay: 
	public CWnd 
{ 
public: 
	CWaveDisplay(HWND hOwner); 
	~CWaveDisplay(void); 
 
public: 
 
	// 释放所占用资源 
	void Dispose(); 
 
	// 设定显示数据 
	void LoadData( 
		double* pData,			/*数据内容*/ 
		unsigned int nSize		/*数据长度*/ 
		); 
 
	// 设定波形颜色, 默认为明绿 
	void SetLineColor( 
		int nRed = 0,  
		int nGreen = 255,  
		int nBlack = 0 
		); 
 
	// 设定网格颜色,默认为暗绿 
	void SetGridColor( 
		int nRed = 0, 
		int nGreen = 128, 
		int nBlack = 64 
		); 
 
	// 设定背景颜色,默认为黑色 
	void SetBkColor( 
		int nRed = 0,  
		int nGreen = 0,  
		int nBlack = 0 
		); 
 
	// 设定坐标轴颜色,默认为黄色 
	void SetCoordinateColor( 
		int nRed = 255,  
		int nGreen = 255,  
		int nBlack = 0 
		); 
 
	void SetXMetrics(float fValue = 1);						// 设定X轴逻辑单元参数值 
	void SetYMetrics(float fValue = 1);						// 设定Y轴逻辑单元参数值 
	void SetZoomStep(UINT nStep = 2);						// 用鼠标中键滚动,进行显示微调时的放大倍数 
 
	UINT GetZoomSetp() const;								// 获取微调放大倍数 
	UINT GetPrecision() const;								// 获取显示精度 
	float GetXMetrics() const;								// 获取X轴逻辑单元参数值 
	float GetYMetrics() const;								// 获取Y轴逻辑单元参数值 
 
	void SetCellSize(UINT nSize = 10);					// 设定显示单元格的宽(高)度,以象素为单位 
	void SetGridWidth(UINT nWidth = 1);					// 设定网格线宽度 
	void SetCoordinateWidth(UINT nWidth = 1);			// 设定坐标线条宽度 
	void SetLineWidth(UINT nWidth = 1);					// 设定波形线条宽度 
 
private: 
	void DrawTable(CPaintDC* pDc);				// 绘制显示表格 
	void DrawData(CPaintDC* pDc);				// 绘制波形 
	//void AppendBuffer(PDisplayChunk pChunk);	// 加入新的显示缓冲块,维护缓冲块链表 
	void InitDefaultSetting();					// 调用默认设置函数初始化显示区域 
 
private:	 
	PDisplayChunk m_pBuffer;	// 缓冲区头指针 
	UINT m_nTimer;				// 定时执行信息绘制的时钟 
	UINT m_nSamplesPerElapse;	// 每个时间间隔内描绘的数据数量 
	HWND m_hOwner;				// 显示控件所在的父控件句柄 
 
	UINT m_nCellSize;			// 显示单元格高(宽)度,以象素为单位 
	UINT m_nCoordinateWidth;	// 设定坐标线条宽度 
	UINT m_nLineWidth;			// 设定波形线条宽度 
	UINT m_nGridWidth;			// 设定网格线条宽度 
	float m_fXMetrics;			// X轴逻辑单元宽度 
	float m_fYMetrics;			// Y轴逻辑单元宽度 
	UINT m_nZoomStep;			// 显示微调倍数 
 
	CPoint m_ptOrigin;			// 显示区域坐标原点位置 
	CPoint m_ptCurPos;			// 记录当前描点所在位置 
	CRect m_clientRect;			// 记录显示区域范围 
 
	COLORREF m_refLineColor;		// 波形颜色,默认为明绿色(0,255,0) 
	COLORREF m_refGridColor;		// 网格颜色,默认为暗绿色(0,128,64) 
	COLORREF m_refBkColor;			// 背景色,没人为黑色(0,0,0) 
	COLORREF m_refCoordinateColor;	// 坐标轴颜色,默认为黄色(255,255,0) 
 
public: 
	DECLARE_MESSAGE_MAP() 
	afx_msg void OnPaint(); 
private: 
	// 显示精度 
	UINT m_nPrecision; 
public: 
	void SetPrecision(UINT nPrecision = 1); 
	afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt); 
}; 
 
#endif