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