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

📄 zhangjg_dspview.cpp

📁 这是我学习数字信号处理时编写的程序!功能就是显示一些常用的函数的图形!并可以做FFT计算!
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// Zhangjg_dspView.cpp : implementation of the CZhangjg_dspView class
//

#include "stdafx.h"
#include "Zhangjg_dsp.h"

#include "Zhangjg_dspDoc.h"
#include "Zhangjg_dspView.h"
#include "Gauss.h"
#include "Choocep.h"
#include "Chooceq.h"
#include "Expression.h"
#include "Rectangle.h"
#include "TransformRegion.h"
#include "Triangle.h"

#include "Attenuation_Sin.h"
#include <complex>
using namespace std;
#include "math.h"
#define PI 3.1415926
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CZhangjg_dspView

IMPLEMENT_DYNCREATE(CZhangjg_dspView, CScrollView)

BEGIN_MESSAGE_MAP(CZhangjg_dspView, CScrollView)
	//{{AFX_MSG_MAP(CZhangjg_dspView)
	ON_COMMAND(ID_GAUSS, OnGauss)
	ON_COMMAND(ID_TRIANGLE, OnTriangle)
	ON_COMMAND(ID_ATTENUATIONSIN, OnAttenuationsin)
	ON_COMMAND(ID_FFT, OnFft)
	ON_COMMAND(ID_DFT, OnDft)
	ON_COMMAND(ID_RECTANGLE, OnRectangle)
	ON_COMMAND(ID_FOURIER, OnFourier)
	ON_WM_MOUSEMOVE()
	ON_COMMAND(ID_RETRIANGLE, OnRetriangle)
//	ON_COMMAND(ID2_RECTANGLE, OnRectangle)
//	ON_COMMAND(ID2_RECTANGLESY2, OnRectanglesy2)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
	ON_UPDATE_COMMAND_UI(ID_COORDINATE_X,OnUpdateCoorX)
	ON_UPDATE_COMMAND_UI(ID_COORDINATE_Y,OnUpdateCoorY)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CZhangjg_dspView construction/destruction

CZhangjg_dspView::CZhangjg_dspView()
{
	 flag=0;
	 stepx=100;
     stepy=100;
	 pointx=400;
	 pointy=500;
	 m_CurPos=CPoint(0,0);
	 m_Test=FALSE;

}

CZhangjg_dspView::~CZhangjg_dspView()
{
	//	delete X;
}

BOOL CZhangjg_dspView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CScrollView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CZhangjg_dspView drawing

void CZhangjg_dspView::OnDraw(CDC* pDC)
{	
	 CZhangjg_dspDoc* pDoc = GetDocument();

	ASSERT_VALID(pDoc);  
	CPen *pOldPen;
    CExpression Expression;
	CPen pen(PS_SOLID,1,RGB(0,0,0));//黑线;
	CPen pen1(PS_SOLID,1,RGB(255,0,0));//红线
	CPen pen2(PS_SOLID,1,RGB(0,255,0));//绿线
	CPen pen3(PS_SOLID,1,RGB(0,0,255));//蓝线
	CPen pen4(PS_SOLID,1,RGB(250,238,5));//黄色
	CPen pen5(PS_SOLID,1,RGB(255,128,255));//粉红色

	pOldPen=pDC->SelectObject(&pen);
	//DrawCoordinate(stepx,stepy,pointx,pointy,pDC);          //Draw Coordinate;
	if(flag==1)            //show sequence;
	{	Expression.DrawCoordinate(stepx,stepy,pointx,pointy,pDC,pDoc);          //Draw Coordinate;
		pOldPen=pDC->SelectObject(&pen1);
    for(int i=0;i<=pDoc->m_N-1;i++)
	{
			pDC->MoveTo(pointx+stepx*i,pointy);
			if(X[i]*stepy>=1||X[i]*stepy<=-1)
			pDC->LineTo(pointx+stepx*i,(int)(pointy-X[i]*stepy));
			else 
			{
				CBrush *brush;
				brush=new CBrush(RGB(255,0,0));
				CBrush * pOldBrush=pDC->SelectObject(brush);
				pDC->Rectangle(pointx+stepx*i-2,pointy-2,pointx+stepx*i+2,pointy+2);
				pDC->SelectObject(pOldBrush);
			}
	}
		pDC->SelectObject(pOldPen); 
	}

	if(flag==2)
	{	Expression.DrawCoordinate(stepx,stepy,pointx,pointy,pDC,pDoc);          //Draw Coordinate;
		pOldPen=pDC->SelectObject(&pen1);
		pDC->MoveTo(pointx+0,(int)(pointy-X[0]*stepy));    //draw pen position;
		for(int i=1;i<=FourierLength-1;i++)
		{
		pDC->LineTo(pointx+i,(int)(pointy-X[i]*stepy));    //because the lenght in not the same;
		pDC->MoveTo(pointx+i,(int)(pointy-X[i]*stepy)); //show Fourier Transform;
		if(i==int(PI*stepx))
		    pDC->TextOut(pointx+i,pointy,"PI");
		if(i==int(2*PI*stepx-10))
		    pDC->TextOut(pointx+i,pointy,"2PI");
		}
		pDC->SelectObject(pOldPen); 
	}
	if(flag==3)            //show sequence;
	{	Expression.DrawCoordinate(stepx,stepy,pointx,pointy,pDC,pDoc);          //Draw Coordinate;
		pOldPen=pDC->SelectObject(&pen1);
    for(int i=0;i<=pDoc->m_N-1;i++)
	{
			pDC->MoveTo(pointx+stepx*i,pointy);
			if(AF[i]*stepy>=1||AF[i]*stepy<=-1)
			pDC->LineTo(pointx+stepx*i,(int)(pointy-AF[i]*stepy));
			else 
			{
				CBrush *brush;
				brush=new CBrush(RGB(255,0,0));
				CBrush * pOldBrush=pDC->SelectObject(brush);
				pDC->Rectangle(pointx+stepx*i-2,pointy-2,pointx+stepx*i+2,pointy+2);
				pDC->SelectObject(pOldBrush);
			}
	}
		pDC->SelectObject(pOldPen); 
	}


	
}

void CZhangjg_dspView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();

	CSize sizeTotal;
	// TODO: calculate the total size of this view
	sizeTotal.cx = sizeTotal.cy = 100;
	SetScrollSizes(MM_TEXT, sizeTotal);
}

/////////////////////////////////////////////////////////////////////////////
// CZhangjg_dspView printing

BOOL CZhangjg_dspView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CZhangjg_dspView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CZhangjg_dspView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CZhangjg_dspView diagnostics

#ifdef _DEBUG
void CZhangjg_dspView::AssertValid() const
{
	CScrollView::AssertValid();
}

void CZhangjg_dspView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}

CZhangjg_dspDoc* CZhangjg_dspView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CZhangjg_dspDoc)));
	return (CZhangjg_dspDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CZhangjg_dspView message handlers

void CZhangjg_dspView::OnGauss() 
{
	CZhangjg_dspDoc *pDoc=GetDocument();//获取活动文档的指针;
	CExpression expression;
	CGauss Dlg;
	//Dlg.m_N=32;  //初始化;
	Dlg.m_n=16;
		if (Dlg.DoModal() != IDOK)
	{
		// 返回
		return;
	}
    	pDoc->m_N=Dlg.m_n;
		pDoc->m_n=Dlg.m_n;
		pDoc->X=new double[pDoc->m_N];                 //开辟内存,存储初值数组长度;
		for(int i=0;i<=pDoc->m_N-1;i++)
		{
			pDoc->X[i]=0;
		}                                      //置零;
		X=new double[pDoc->m_N];                 //开辟内存,存储初值数组长度;
		for(i=0;i<=pDoc->m_N-1;i++)
		{
			X[i]=0;
		}                                      //置零;
		if(Dlg.flag==1)
		{
			pDoc->m_p=8;
			CChooceq Dlg;
		if (Dlg.DoModal() != IDOK)
	{
		// 返回
		return;
	}
			switch (Dlg.flag)
			{
			case 2:
				pDoc->m_q=2;
				break;
			case 4:
				pDoc->m_q=4;
				break;
			case 8:
				pDoc->m_q=8;
				break;
			default:
				pDoc->m_q=0;
			}

		}
		if(Dlg.flag==2)
		{
			pDoc->m_q=8;
			CChoocep Dlg;
					if (Dlg.DoModal() != IDOK)
					{
		                   // 返回
		                    return;
					}
			switch (Dlg.flag)
			{
			case 8:
				pDoc->m_p=8;
				break;
			case 13:
				pDoc->m_p=13;
				break;
			case 14:
				pDoc->m_p=14;
				break;
			default:
				pDoc->m_p=0;
			}
		}
		expression.Gauss(pDoc->m_p,pDoc->m_q,pDoc->X,pDoc->m_n);
		memcpy(X, pDoc->X, sizeof(double) * pDoc->m_N); //copy pDoc->X to X,use X for show;
        flag=1;                  //show modle;
		stepx=(int)900/pDoc->m_n;
        stepy=50;
	    pointx=50;
	    pointy=500;              //coordinate following;
		pDoc->UpdateAllViews(NULL);//更新视图
	//	delete X;     why can not delete;
		m_Test=TRUE;
}

void CZhangjg_dspView::OnTriangle() 

⌨️ 快捷键说明

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