📄 wave.cpp
字号:
// Wave.cpp: implementation of the CWave class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Oscillograph.h"
#include "Wave.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CWave::CWave()
{
m_nLeft = 0; //示波器左边界
m_nTop = 0; //示波器上边界
m_nWidth = 0; //示波器宽度
m_nHeight = 0; //示波器高度
m_dblXMax = 1; //X轴最大值
m_dblXMin = 0; //X轴最小值
m_dblYMax = 1; //Y轴最大值
m_dblYMin = 0; //Y轴最小值
m_pWaveBuffer = NULL; //将要显示波形的数据缓存
m_nBufferSize = 0; //将要显示波形的数据缓存的大小
}
CWave::~CWave()
{
/* if(m_pWaveBuffer)
{
delete [] m_pWaveBuffer;
}
*/
}
//设置示波器的大小
void CWave::SetSize(int x, int y, int nWidth, int nHeight)
{
m_nLeft = x; //示波器左边界
m_nTop = y; //示波器上边界
m_nWidth = nWidth; //示波器宽度
m_nHeight = nHeight; //示波器高度
}
//显示示波器界面
void CWave::ShowFigure()
{
//绘制示波器边框
CBrush Brush,*pOldBrush;
Brush.CreateStockObject(BLACK_BRUSH);//选择黑色背景
pOldBrush = pDC->SelectObject(&Brush);
pDC->Rectangle(m_nLeft, m_nTop, m_nLeft + m_nWidth, m_nTop + m_nHeight);//画出示波器边框
pDC->SelectObject(pOldBrush);
Brush.DeleteObject();
//X轴Y轴坐标
DrawXYCoordinate();
}
//得到将要显示的波形数据缓冲区指针
void CWave::GetWave(double *pWaveBuffer, int nBufferSize)
{
m_pWaveBuffer = pWaveBuffer; //将要显示波形的数据缓存
m_nBufferSize = nBufferSize; //将要显示波形的数据缓存的大小
m_dblXMin = 0; //X轴最小值
m_dblXMax = nBufferSize - 1; //x轴最大值默认为波形点数
m_dblYMin = m_pWaveBuffer[0];
m_dblYMax = m_pWaveBuffer[0];
for(int i=0; i<m_nBufferSize; i++)
{
if(m_dblYMin > m_pWaveBuffer[i])
{
m_dblYMin = m_pWaveBuffer[i];
}
if(m_dblYMax < m_pWaveBuffer[i])
{
m_dblYMax = m_pWaveBuffer[i];
}
}
m_dblXCoef = m_nWidth / (m_dblXMax - m_dblXMin); //X轴每个单位的像素数(x轴系数) = Width/(XMax-XMin)
m_dblYCoef = m_nHeight / (m_dblYMax - m_dblYMin); //Y轴每个单位的像素数(Y轴系数) = Height/(YMax-YMin)
}
//得到显示示波器的设备环境
void CWave::GetDC(CDC *pDC)
{
this->pDC = pDC; //获得示波器的内存的设备环境
}
//显示波形
void CWave::ShowWave()
{
//重绘X、Y轴坐标
DrawXYCoordinate();
//绘制曲线
CPen Pen,*pOldPen;
Pen.CreatePen(PS_SOLID,1,RGB(0,255,0));
pOldPen = pDC->SelectObject(&Pen);
int xPre,yPre,x,y;
xPre = m_nLeft + int(m_dblXCoef*(0-m_dblXMin));
yPre = m_nTop + int(m_dblYCoef*(m_dblYMax-m_pWaveBuffer[0]));
for(int i=1; i<m_nBufferSize; i++)
{
x = m_nLeft + int(m_dblXCoef*(i-m_dblXMin));
y = m_nTop + int(m_dblYCoef*(m_dblYMax-m_pWaveBuffer[i]));
pDC->MoveTo(xPre, yPre);
pDC->LineTo(x, y);
xPre = x;
yPre = y;
}
pDC->SelectObject(pOldPen);
Pen.DeleteObject();
}
//设置示波器X轴上下限范围
void CWave::SetXLimits(double dblXMin, double dblXMax)
{
m_dblXMin = dblXMin; //X轴最小值
m_dblXMax = dblXMax; //X轴最大值
m_dblXCoef = m_nWidth / (m_dblXMax - m_dblXMin); //X轴每个单位的像素数(x轴系数) = Width/(XMax-XMin)
}
//设置示波器Y轴上下限范围
void CWave::SetYLimits(double dblYMin, double dblYMax)
{
m_dblYMin = dblYMin; //Y轴最小值
m_dblYMax = dblYMax; //Y轴最大值
m_dblYCoef = m_nHeight / (m_dblYMax - m_dblYMin); //Y轴每个单位的像素数(Y轴系数) = Height/(YMax-YMin)
}
//绘制X、Y轴坐标
void CWave::DrawXYCoordinate()
{
//X轴Y轴坐标
CString str;
str.Format("%.3f",m_dblYMax);
pDC->TextOut(m_nLeft,m_nTop,str);
str.Format("%.3f",m_dblYMin);
pDC->TextOut(m_nLeft,m_nTop+m_nHeight-20,str);
str.Format("%.3f",m_dblXMin);
pDC->TextOut(m_nLeft,m_nTop+m_nHeight,str);
str.Format("%.3f",m_dblXMax);
pDC->TextOut(m_nLeft+m_nWidth-30,m_nTop+m_nHeight,str);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -