?? firstview.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
//設(shè)定坐標系
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); //黃色實現(xiàn)
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); //粉色實現(xiàn)
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);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -