WaveDisplay.h
上传用户:goak128
上传日期:2013-07-17
资源大小:155k
文件大小:4k
源码类别:

控制台编程

开发平台:

C/C++

  1. #ifndef _CWAVEDISPLAY_H
  2. #define _CWAVEDISPLAY_H
  3. //////////////////////////////////////////////////////////////////////////
  4. // class CWaveDisplay
  5. //
  6. // 功能: 实现数据的在GUI上的显示
  7. // 创建人: 陈文凯 (chwkai@gmail.com)
  8. // 创建日期:2005年5月19日
  9. // 修改人:
  10. // 修改日期:
  11. // 版本
  12. #include "afxwin.h"
  13. //////////////////////////////////////////////////////////////////////////
  14. // 定义缓冲区数据结构
  15. typedef struct _displayChunk
  16. {
  17. double* lpData; // 数据内容
  18. unsigned int nSize; // 数据长度
  19. unsigned int nDataReaded; // 已经输出的数据长度
  20. _displayChunk* lpNext; // 指向下一个缓冲快
  21. } DisplayChunk, *PDisplayChunk;
  22. //////////////////////////////////////////////////////////////////////////
  23. // 音频数据显示
  24. class CWaveDisplay:
  25. public CWnd
  26. {
  27. public:
  28. CWaveDisplay(HWND hOwner);
  29. ~CWaveDisplay(void);
  30. public:
  31. // 释放所占用资源
  32. void Dispose();
  33. // 设定显示数据
  34. void LoadData(
  35. double* pData, /*数据内容*/
  36. unsigned int nSize /*数据长度*/
  37. );
  38. // 设定波形颜色, 默认为明绿
  39. void SetLineColor(
  40. int nRed = 0, 
  41. int nGreen = 255, 
  42. int nBlack = 0
  43. );
  44. // 设定网格颜色,默认为暗绿
  45. void SetGridColor(
  46. int nRed = 0,
  47. int nGreen = 128,
  48. int nBlack = 64
  49. );
  50. // 设定背景颜色,默认为黑色
  51. void SetBkColor(
  52. int nRed = 0, 
  53. int nGreen = 0, 
  54. int nBlack = 0
  55. );
  56. // 设定坐标轴颜色,默认为黄色
  57. void SetCoordinateColor(
  58. int nRed = 255, 
  59. int nGreen = 255, 
  60. int nBlack = 0
  61. );
  62. void SetXMetrics(float fValue = 1); // 设定X轴逻辑单元参数值
  63. void SetYMetrics(float fValue = 1); // 设定Y轴逻辑单元参数值
  64. void SetZoomStep(UINT nStep = 2); // 用鼠标中键滚动,进行显示微调时的放大倍数
  65. UINT GetZoomSetp() const; // 获取微调放大倍数
  66. UINT GetPrecision() const; // 获取显示精度
  67. float GetXMetrics() const; // 获取X轴逻辑单元参数值
  68. float GetYMetrics() const; // 获取Y轴逻辑单元参数值
  69. void SetCellSize(UINT nSize = 10); // 设定显示单元格的宽(高)度,以象素为单位
  70. void SetGridWidth(UINT nWidth = 1); // 设定网格线宽度
  71. void SetCoordinateWidth(UINT nWidth = 1); // 设定坐标线条宽度
  72. void SetLineWidth(UINT nWidth = 1); // 设定波形线条宽度
  73. private:
  74. void DrawTable(CPaintDC* pDc); // 绘制显示表格
  75. void DrawData(CPaintDC* pDc); // 绘制波形
  76. //void AppendBuffer(PDisplayChunk pChunk); // 加入新的显示缓冲块,维护缓冲块链表
  77. void InitDefaultSetting(); // 调用默认设置函数初始化显示区域
  78. private:
  79. PDisplayChunk m_pBuffer; // 缓冲区头指针
  80. UINT m_nTimer; // 定时执行信息绘制的时钟
  81. UINT m_nSamplesPerElapse; // 每个时间间隔内描绘的数据数量
  82. HWND m_hOwner; // 显示控件所在的父控件句柄
  83. UINT m_nCellSize; // 显示单元格高(宽)度,以象素为单位
  84. UINT m_nCoordinateWidth; // 设定坐标线条宽度
  85. UINT m_nLineWidth; // 设定波形线条宽度
  86. UINT m_nGridWidth; // 设定网格线条宽度
  87. float m_fXMetrics; // X轴逻辑单元宽度
  88. float m_fYMetrics; // Y轴逻辑单元宽度
  89. UINT m_nZoomStep; // 显示微调倍数
  90. CPoint m_ptOrigin; // 显示区域坐标原点位置
  91. CPoint m_ptCurPos; // 记录当前描点所在位置
  92. CRect m_clientRect; // 记录显示区域范围
  93. COLORREF m_refLineColor; // 波形颜色,默认为明绿色(0,255,0)
  94. COLORREF m_refGridColor; // 网格颜色,默认为暗绿色(0,128,64)
  95. COLORREF m_refBkColor; // 背景色,没人为黑色(0,0,0)
  96. COLORREF m_refCoordinateColor; // 坐标轴颜色,默认为黄色(255,255,0)
  97. public:
  98. DECLARE_MESSAGE_MAP()
  99. afx_msg void OnPaint();
  100. private:
  101. // 显示精度
  102. UINT m_nPrecision;
  103. public:
  104. void SetPrecision(UINT nPrecision = 1);
  105. afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
  106. };
  107. #endif