📄 zhangjg_dspview.cpp
字号:
// 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 + -