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

📄 firstview.cpp

📁 通过输入不同的电路参数就可以从窗口得到相应的图形仿真结果。
💻 CPP
字号:
// firstView.cpp : implementation of the CFirstView class
//

#include "stdafx.h"
#include "first.h"

#include "firstDoc.h"
#include "firstView.h"
#include "InputParaDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CFirstView

IMPLEMENT_DYNCREATE(CFirstView, CView)

BEGIN_MESSAGE_MAP(CFirstView, CView)
	//{{AFX_MSG_MAP(CFirstView)
	ON_COMMAND(ID_SET_PARA, OnSetPara)
	//}}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()

/////////////////////////////////////////////////////////////////////////////
// CFirstView construction/destruction

CFirstView::CFirstView()
{
	// TODO: add construction code here
	DrawFlag = FALSE;
}

CFirstView::~CFirstView()
{
}

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

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CFirstView drawing

void CFirstView::OnDraw(CDC* pDC)
{
	CFirstDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here

	//设定坐标系
	CRect cRect;
	int OrgDC;
	OrgDC=pDC->SaveDC();
	pDC->SetMapMode(MM_ISOTROPIC);
	pDC->SetWindowExt(2000,1600);
	AfxGetMainWnd()->GetClientRect(cRect);
	pDC->SetViewportExt(cRect.Width(),-cRect.Height());
	pDC->DPtoLP(cRect);
	pDC->SetWindowOrg(-(cRect.Width()/2),-(cRect.Height()/2));

	//输出标题
	pDC->TextOut(-400,750,"First Project:  Comparison Circuit");

	//画出坐标轴
	CPen *pOldPen, cBlackPen(PS_SOLID,4,0x02000000);
	pOldPen=pDC->SelectObject(&cBlackPen);
	pDC->MoveTo(0,0);
	pDC->LineTo(1000,0);
	pDC->MoveTo(980,10);
	pDC->LineTo(1000,0);
	pDC->LineTo(980,-10);
	pDC->MoveTo(0,600);
	pDC->LineTo(0,-600);
	pDC->MoveTo(-10,580);
	pDC->LineTo(0,600);
	pDC->LineTo(10,580);
	for(int j=1;j<12;j++)
	{
		pDC->MoveTo(-10,50*j);
        pDC->LineTo(10,50*j);
		pDC->MoveTo(-10,-50*j);
        pDC->LineTo(10,-50*j);
	}
	for(j=1;j<20;j++)
	{
		pDC->MoveTo(50*j,-10);
		pDC->LineTo(50*j,10);
	}
	pDC->SelectObject(pOldPen);
	cBlackPen.DeleteObject();
	pDC->TextOut(980,-20,"t");
	pDC->TextOut(-60,600,"/V");
	pDC->TextOut(-50,20,"0");
	pDC->TextOut(-50,70,"1");

    //画电路图
	CPen cBluePen(PS_SOLID,4,0x02ff0000);
	pOldPen=pDC->SelectObject(&cBluePen);
	POINT polypts[]={-600,-100,-600,100,-350,0};
	pDC->Polygon(polypts,3);
	pDC->Rectangle(-300,20,-200,-20);
	pDC->Rectangle(-850,80,-750,40);
	pDC->Rectangle(-850,180,-750,140);
	pDC->MoveTo(-750,60);
	pDC->LineTo(-600,60);
	pDC->MoveTo(-750,160);
	pDC->LineTo(-680,160);
	pDC->LineTo(-680,60);
	pDC->MoveTo(-900,60);
	pDC->LineTo(-850,60);
	pDC->MoveTo(-900,160);
	pDC->LineTo(-850,160);
	pDC->MoveTo(-600,-60);
	pDC->LineTo(-680,-60);
	pDC->LineTo(-680,-120);
	pDC->MoveTo(-720,-120);
	pDC->LineTo(-640,-120);
	pDC->MoveTo(-350,0);
	pDC->LineTo(-300,-0);
	pDC->MoveTo(-200,0);
	pDC->LineTo(-100,0);
	pDC->MoveTo(-140,0);
	pDC->LineTo(-140,-200);
	pDC->MoveTo(-180,-200);
	pDC->LineTo(-100,-200);
	POINT polypts1[]={-160,-65,-120,-65,-140,-100};
	pDC->Polygon(polypts1,3);
	POINT polypts2[]={-160,-135,-120,-135,-140,-100};
	pDC->Polygon(polypts2,3);
	pDC->MoveTo(-140,0);
	pDC->LineTo(-140,-200);
	pDC->MoveTo(-160,-90);
	pDC->LineTo(-160,-100);
	pDC->LineTo(-120,-100);
	pDC->LineTo(-120,-110);
	pDC->Ellipse(-100,10,-80,-10);
	pDC->Ellipse(-920,70,-900,50);
	pDC->Ellipse(-920,170,-900,150);

	pDC->TextOut(-260,70,"R");
	pDC->TextOut(-830,230,"R1");
	pDC->TextOut(-830,130,"R2");
	pDC->TextOut(-520,20,"A");
	pDC->TextOut(-580,80,"-");
	pDC->TextOut(-580,-30,"+");
	pDC->TextOut(-230,-50,"Dz");
	pDC->TextOut(-280,-100,"+/-Uz");
	pDC->TextOut(-950,230,"Uref");
	pDC->TextOut(-950,130,"Ui");
	pDC->TextOut(-120,70,"Uo");

	//InputParaDlg InputDlg;
	if (DrawFlag)
	{
		int i;
		//画波形图
		//画出输入的三角波, 蓝笔
		//int A,T;
		//A = InputDlg.m_Ui_A;//A=10;
		//T = InputDlg.m_Ui_T;//T=5;
		pDC->MoveTo(0,-50*A/2);
		for(i=0;i<3;i++)
		{
			pDC->LineTo(int(50*(T*i+double(T)/2)),50*A/2);
			pDC->LineTo(50*(T*i+T),-50*A/2);
		}
		pDC->SetTextColor(0x02ff0000);
		pDC->TextOut(-80,400,"Ui");
		pDC->SelectObject(pOldPen);
		cBluePen.DeleteObject();

		//过零比较器
//		int Uz0=5;
		CPen cYellowPen(PS_SOLID,2,0x0200ffff);    //黄色实现
		pOldPen=pDC->SelectObject(&cYellowPen);
		pDC->MoveTo(0,50*Uz);
		for(i=0;i<3;i++)
		{
			pDC->LineTo(int(50*(double(T)/4+i*T)),50*Uz);
			pDC->LineTo(int(50*(double(T)/4+i*T)),-50*Uz);
			pDC->LineTo(int(50*(T*i+T-double(T)/4)),-50*Uz);
			pDC->LineTo(int(50*(T*i+T-double(T)/4)),50*Uz);
			pDC->LineTo(50*(T*i+T),50*Uz);
		}
		pDC->SetTextColor(0x0200ffff);
		pDC->TextOut(-90,460,"Uo'");

		//画出单限比较器输出波形
		//int Uz,Uref,R1,R2;
		//Uz = InputDlg.m_Uz;//Uz=5;
		//Uref = InputDlg.m_Uref;//Uref=2;
		//R1 = InputDlg.m_R1;//R1=R2=5;
		//R2 = InputDlg.m_R2;
    
		CPen cGreenPen(PS_DASH,3,0x0200ff00);    //绿笔虚线,表示交点
		pOldPen=pDC->SelectObject(&cGreenPen);
		double x,y;
		y=-R2*Uref/R1;
		pDC->MoveTo(0,int(50*y));
		pDC->LineTo(1000,int(50*y));
		x=(A/2+y)*T/2/A;
		pDC->MoveTo(int(50*x),-600);
		pDC->LineTo(int(50*x),600);

		CPen cPinkPen(PS_SOLID,4,0x02ff00ff);    //粉色实现
		pOldPen=pDC->SelectObject(&cPinkPen);
		pDC->MoveTo(0,50*Uz);
		for(i=0;i<3;i++)
		{
			pDC->LineTo(int(50*(x+i*T)),50*Uz);
			pDC->LineTo(int(50*(x+i*T)),-50*Uz);
			pDC->LineTo(int(50*(T*i+T-x)),-50*Uz);
			pDC->LineTo(int(50*(T*i+T-x)),50*Uz);
			pDC->LineTo(50*(T*i+T),50*Uz);
		}
		pDC->SetTextColor(0x02ff00ff);
		pDC->TextOut(-80,340,"Uo");
	}


	pDC->RestoreDC(OrgDC);
	pDC->SelectObject(pOldPen);

}

/////////////////////////////////////////////////////////////////////////////
// CFirstView printing

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CFirstView diagnostics

#ifdef _DEBUG
void CFirstView::AssertValid() const
{
	CView::AssertValid();
}

void CFirstView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

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

/////////////////////////////////////////////////////////////////////////////
// CFirstView message handlers

void CFirstView::OnSetPara() 
{
	// TODO: Add your command handler code here
	InputParaDlg dlg;

	if(dlg.DoModal()==IDOK)
	{
		DrawFlag = FALSE;
		Invalidate(TRUE);
		R1=dlg.m_R1;
		R2=dlg.m_R2;
		A=dlg.m_Ui_A;
		T=dlg.m_Ui_T;
		Uref=dlg.m_Uref;
		Uz=dlg.m_Uz;
		DrawFlag = TRUE;
		Invalidate(FALSE);
	}

}

⌨️ 快捷键说明

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