📄 myview1.cpp
字号:
// MyView1.cpp : implementation file
//
#include "stdafx.h"
#include "DMC.h"
#include "MyView1.h"
#include "DMCDoc.h"
#include "fun_dmcsim.hpp"
#include "matlab.hpp"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMyView1
IMPLEMENT_DYNCREATE(CMyView1, CView)
CMyView1::CMyView1()
{
pen1.CreatePen(PS_SOLID,2,RGB(0,0,0));
pen2.CreatePen(PS_DOT,1,RGB(255,71,170));
pen3.CreatePen(PS_SOLID,2,RGB(0,255,0));
pen4.CreatePen(PS_SOLID,2,RGB(0,0,255));
pen5.CreatePen(PS_SOLID,2,RGB(255,0,0));
flagRY=FALSE;
}
CMyView1::~CMyView1()
{
}
BEGIN_MESSAGE_MAP(CMyView1, CView)
//{{AFX_MSG_MAP(CMyView1)
ON_COMMAND(ID_RUN, OnRun)
ON_COMMAND(ID_CREATE, OnCreate)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyView1 drawing
void CMyView1::OnDraw(CDC* pDC)
{
CDMCDoc* pDoc = (CDMCDoc*)GetDocument();
ASSERT_VALID(pDoc);
DrawCoordinate1();
DrawCoordinate2();
if(pDoc->DocFlag1==TRUE)
{
DrawS();
}
if(flagRY==TRUE)
{
DrawRY();
DrawU();
}
}
/////////////////////////////////////////////////////////////////////////////
// CMyView1 diagnostics
#ifdef _DEBUG
void CMyView1::AssertValid() const
{
CView::AssertValid();
}
void CMyView1::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMyView1 message handlers
void CMyView1::DrawCoordinate1()
{
CDC *pDC=GetDC();
pDC->SelectObject(&pen1);
pDC->MoveTo(25,50);
pDC->LineTo(25,300);//第一个图的纵坐标
pDC->LineTo(425,300);//第一个图的横坐标
pDC->LineTo(420,295);
pDC->MoveTo(425,300);
pDC->LineTo(420,305);//横坐标的小箭头
pDC->MoveTo(25,50);
pDC->LineTo(20,55);
pDC->MoveTo(25,50);
pDC->LineTo(30,55);//纵坐标的小箭头
for(int i=1;i<5;i++)
{
pDC->MoveTo(25+80*i,300);
pDC->LineTo(25+80*i,295); //画横坐标的小杠
}
for(i=1;i<5;i++)
{
pDC->MoveTo(25,50+50*i);
pDC->LineTo(30,50+50*i); //画纵坐标的小杠
}
pDC->TextOut(30,310,"0");
pDC->TextOut(100,310,"10");
pDC->TextOut(180,310,"20");
pDC->TextOut(260,310,"30");
pDC->TextOut(340,310,"40");
pDC->TextOut(420,310,"50");
pDC->TextOut(0,300,"-0.2");
pDC->TextOut(0,250,"0");
pDC->TextOut(0,200,"0.2");
pDC->TextOut(0,150,"0.4");
pDC->TextOut(0,100,"0.6");
pDC->TextOut(0,50,"0.8");
pDC->TextOut(0,20,"输出");
pDC->TextOut(400,350,"时间0.1s");
ReleaseDC(pDC);
}
void CMyView1::DrawCoordinate2()
{
CDC *pDC=GetDC();
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
pDC->SelectObject(&pBrush);
pDC->SelectObject(&pen1);
pDC->Rectangle(550,20,910,180);//第二个坐标的外框
pDC->Rectangle(550,220,910,380); //第三个坐标的外框
pDC->SelectObject(&pen2);
for(int i=1;i<6;i++) ///第二个坐标的网格线
{
pDC->MoveTo(550+i*60,20);
pDC->LineTo(550+i*60,180);
}
for(i=1;i<4;i++)
{
pDC->MoveTo(550,20+40*i);
pDC->LineTo(910,20+40*i);
}
for(i=1;i<6;i++) //////第三个坐标的网格线
{
pDC->MoveTo(550+i*60,220);
pDC->LineTo(550+i*60,380);
}
for(i=1;i<4;i++)
{
pDC->MoveTo(550,220+40*i);
pDC->LineTo(910,220+40*i);
}
pDC->TextOut(520,215,"4");//第二个坐标纵坐标标识
pDC->TextOut(520,255,"3");
pDC->TextOut(520,295,"2");
pDC->TextOut(520,335,"1");
pDC->TextOut(520,375,"0");
pDC->TextOut(520,15,"1.5");//第三个坐标纵坐标标识
pDC->TextOut(520,59,"1");
pDC->TextOut(520,95,"0.5");
pDC->TextOut(520,135,"0");
pDC->TextOut(520,175,"-0.5");
pDC->TextOut(550,180,"0");//第二个坐标横坐标标识
pDC->TextOut(610,180,"1");
pDC->TextOut(670,180,"2");
pDC->TextOut(730,180,"3");
pDC->TextOut(790,180,"4");
pDC->TextOut(850,180,"5");
pDC->TextOut(910,180,"6");
pDC->TextOut(550,380,"0");//第三个坐标横坐标标识
pDC->TextOut(610,380,"1");
pDC->TextOut(670,380,"2");
pDC->TextOut(730,380,"3");
pDC->TextOut(790,380,"4");
pDC->TextOut(850,380,"5");
pDC->TextOut(910,380,"6");
pDC->TextOut(400,15,"给定值:");
pDC->SelectObject(&pen3);
pDC->MoveTo(460,24);
pDC->LineTo(500,24);
pDC->TextOut(400,35,"输出值:");
pDC->SelectObject(&pen4);
pDC->MoveTo(460,45);
pDC->LineTo(500,45);
pDC->TextOut(440,220,"输入值");
pDC->TextOut(930,380,"时间S");
pDC->TextOut(930,180,"时间S");
ReleaseDC(pDC);
}
void CMyView1::OnRun()
{
flagRY=TRUE;
DrawRY();
DrawU();
}
void CMyView1::DrawS()
{
CDC *pDC=GetDC();
CString str;
mwArray s,u,r,y,count1,size1,size2;
double ds[51], du,dr,dy,dcount1,dsize1,dsize2;
s=fun_dmcsim(&u,&r,&y,1);
POINT pt[51];
count1=length(s);
dcount1=count1.ExtractScalar(1);
for(int i=1;i<=dcount1;i++)
{
ds[i-1]=s.ExtractScalar(i);
}
for(i=0;i<dcount1;i++)
{
pt[i].x=25+i*8;
pt[i].y=250-ds[i]*250;
}
pDC->SelectObject(&pen3);
pDC->Polyline(pt,50);
ReleaseDC(pDC);
}
void CMyView1::DrawRY()
{
CDC *pDC=GetDC();
CString str;
mwArray s,u,r,y,count1,count2;
double dr[61],dy[61],dcount1,dcount2;
s=fun_dmcsim(&u,&r,&y,1);
POINT pt[61];
POINT pt1[61];
count1=length(r);
dcount1=count1.ExtractScalar(1);
for(int i=1;i<=dcount1;i++)
{
dr[i-1]=r.ExtractScalar(i);
}
for(i=0;i<dcount1;i++)
{
pt[i].x=550+i*6;
pt[i].y=140-dr[i]*80;
}
pDC->SelectObject(&pen3);
pDC->Polyline(pt,61);/////////画给定值曲线
count2=length(y);
dcount2=count2.ExtractScalar(1);
for( i=1;i<=dcount2;i++)
{
dy[i-1]=y.ExtractScalar(i);
}
for(i=0;i<dcount1;i++)
{
pt1[i].x=550+i*6;
pt1[i].y=140-dy[i]*80;
}
pDC->SelectObject(&pen4);
pDC->Polyline(pt1,61);////管理画输出曲线
ReleaseDC(pDC);
}
void CMyView1::DrawU()
{
CDC *pDC=GetDC();
CString str;
mwArray s,u,r,y,count1;
double du[61],dcount1;
s=fun_dmcsim(&u,&r,&y,1);
POINT pt[61];
count1=length(u);
dcount1=count1.ExtractScalar(1);
for(int i=1;i<=dcount1;i++)
{
du[i-1]=u.ExtractScalar(i);
}
for(i=0;i<dcount1;i++)
{
pt[i].x=550+i*6;
pt[i].y=380-du[i]*40;
}
pDC->SelectObject(&pen5);
pDC->Polyline(pt,61);
ReleaseDC(pDC);
}
void CMyView1::OnCreate()
{
DrawS();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -