WaveDisplay.h
上传用户:goak128
上传日期:2013-07-17
资源大小:155k
文件大小:4k
- #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