⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 waveview.cpp

📁 单片机ram下,pcm转换为wav文件,对想了解pcm和wav文件关系的人有用.
💻 CPP
字号:
// WaveView.cpp : implementation of the CWaveView class//#include "stdafx.h"#include "Wave.h"#include "WaveDoc.h"#include "WaveView.h"
#include "SerialPortDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CWaveViewIMPLEMENT_DYNCREATE(CWaveView, CView)BEGIN_MESSAGE_MAP(CWaveView, CView)	//{{AFX_MSG_MAP(CWaveView)	ON_COMMAND(ID_EDIT_PLAY, OnEditPlay)
	ON_COMMAND(ID_EDIT_STOP, OnEditStop)
	ON_COMMAND(ID_STOP, OnStop)
	ON_COMMAND(ID_PLAY, OnPlay)
	ON_COMMAND(ID_SerialPort, OnSerialPort)
	//}}AFX_MSG_MAP
	// Standard printing commands	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CWaveView construction/destructionCWaveView::CWaveView(){	// TODO: add construction code here	// create color pens	pRedPen = new CPen(PS_SOLID, 0, RGB(255, 0, 0));	pGreenPen = new CPen(PS_SOLID, 0, RGB(0, 255, 0));	pBluePen = new CPen(PS_SOLID, 0, RGB(0, 0, 255));	pBlackPen = new CPen(PS_SOLID, 0, RGB(0, 0, 0));}CWaveView::~CWaveView(){}BOOL CWaveView::PreCreateWindow(CREATESTRUCT& cs){	// TODO: Modify the Window class or styles here by modifying	//  the CREATESTRUCT cs	return CView::PreCreateWindow(cs);}/////////////////////////////////////////////////////////////////////////////// CWaveView drawingvoid CWaveView::OnDraw(CDC* pDC){  	CWaveDoc* pDoc = GetDocument();	ASSERT_VALID(pDoc);	// TODO: add draw code for native data here
     	if (!pDoc->fileOpened) return;
	//HCURSOR hOldCursor=SetCursor(LoadCursor(NULL, IDC_WAIT));   	RECT crect;	GetClientRect(&crect);	int w=crect.right, h=crect.bottom, h0 = h / 2;	long n = pDoc->n;	float dx = (float)w / n, dy = (float)h / 2;	int i, x, y;	// MSG message;		if(pDoc->channels == 1) { // draw channel of mono samples		// draw zero line		pDC->SelectObject(pBluePen);		pDC->MoveTo(0, h0); pDC->LineTo(w, h0);		// draw sample data		pDC->SelectObject(pGreenPen);		for(i = 0; i< n; i++) {			x = (int)(i * dx + 0.5); 			y = h0 - (int)(pDoc->dm[i] * dy + 0.5);			if(i == 0) pDC->MoveTo(x, y); else pDC->LineTo(x, y);			//::PeekMessage(&message, NULL, 0, 0, PM_REMOVE);		}		// draw zero line		pDC->SelectObject(pBluePen);		pDC->MoveTo(0, h0); pDC->LineTo(w, h0);	}	else { // draw channels of stereo samples		dy /= 2; h0 /= 2;		// draw samples of left channel		// draw upper zero line		pDC->SelectObject(pBluePen);		pDC->MoveTo(0, h0); pDC->LineTo(w, h0);		// draw sample data		pDC->SelectObject(pGreenPen);		for(i = 0; i< n; i++) {			x = (int)(i * dx + 0.5); 			y = h0 - (int)(pDoc->dl[i] * dy + 0.5);			if(i == 0) pDC->MoveTo(x, y); else pDC->LineTo(x, y);			//::PeekMessage(&message, NULL, 0, 0, PM_REMOVE);		}		// draw upper zero line		pDC->SelectObject(pBluePen);		pDC->MoveTo(0, h0); pDC->LineTo(w, h0);		// draw seperator line		pDC->SelectObject(pBlackPen);		pDC->MoveTo(0, h / 2); pDC->LineTo(w, h / 2);				// draw samples of right channel		h0 += h / 2;		// draw lower zero line		pDC->SelectObject(pBluePen);		pDC->MoveTo(0, h0); pDC->LineTo(w, h0);		// draw sample data		pDC->SelectObject(pRedPen);		for(i = 0; i< n; i++) {			x = (int)(i * dx + 0.5); 			y = h0 - (int)(pDoc->dr[i] * dy + 0.5);			if(i == 0) pDC->MoveTo(x, y); else pDC->LineTo(x, y);			//::PeekMessage(&message, NULL, 0, 0, PM_REMOVE);		}		// draw lower zero line		pDC->SelectObject(pBluePen);		pDC->MoveTo(0, h0); pDC->LineTo(w, h0);	}	//SetCursor(hOldCursor);
	}/////////////////////////////////////////////////////////////////////////////// CWaveView printingBOOL CWaveView::OnPreparePrinting(CPrintInfo* pInfo){	// default preparation	return DoPreparePrinting(pInfo);}void CWaveView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){	// TODO: add extra initialization before printing}void CWaveView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){	// TODO: add cleanup after printing}/////////////////////////////////////////////////////////////////////////////// CWaveView diagnostics#ifdef _DEBUGvoid CWaveView::AssertValid() const{	CView::AssertValid();}void CWaveView::Dump(CDumpContext& dc) const{	CView::Dump(dc);}CWaveDoc* CWaveView::GetDocument() // non-debug version is inline{	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CWaveDoc)));	return (CWaveDoc*)m_pDocument;
	}#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////// CWaveView message handlers
void CWaveView::OnEditPlay() 
{
	// TODO: Add your command handler code here
	CWaveDoc *temp=GetDocument();
	temp->play();//
	
}

void CWaveView::OnEditStop() 
{
	// TODO: Add your command handler code here
	CWaveDoc *temp=GetDocument();
	temp->stop();//
	
}

void CWaveView::OnStop() 
{
	// TODO: Add your command handler code here
	OnEditStop();
}

void CWaveView::OnPlay() 
{
	// TODO: Add your command handler code here
	CDC *pDC;
	pDC=GetDC();
	OnDraw(pDC);
	OnEditPlay();
}

//打开串口发送接受界面
void CWaveView::OnSerialPort() 
{
	// TODO: Add your command handler code here
	CSerialPortDlg SerialPort;
	SerialPort.DoModal();
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -