📄 setdrawparadialog.cpp
字号:
// SetDrawParaDialog.cpp : implementation file
//
#include "stdafx.h"
#include "MagneticPro.h"
#include "SetDrawParaDialog.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSetDrawParaDialog dialog
CSetDrawParaDialog::CSetDrawParaDialog(CWnd* pParent /*=NULL*/)
: CDialog(CSetDrawParaDialog::IDD, pParent)
{
//{{AFX_DATA_INIT(CSetDrawParaDialog)
m_Xstart = 50;
m_Xscale = 1.0;
m_Ydivide = 20;
m_yN = 5;
m_Yscale = 1.0;
m_Ystart = 550;
m_xN = 5;
m_Xdivide = 20;
m_Title = _T("The Curverof the Array");
//}}AFX_DATA_INIT
Xmax=Xmid=Xmin=Ymax=Ymin=Ymid=0.0;
}
void CSetDrawParaDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSetDrawParaDialog)
DDX_Text(pDX, IDC_Xsart, m_Xstart);
DDX_Text(pDX, IDC_Xscale, m_Xscale);
DDX_Text(pDX, IDC_Ydivide, m_Ydivide);
DDX_Text(pDX, IDC_yN, m_yN);
DDX_Text(pDX, IDC_Yscale, m_Yscale);
DDX_Text(pDX, IDC_Ystart, m_Ystart);
DDX_Text(pDX, IDC_xN, m_xN);
DDX_Text(pDX, IDC_Xdivide, m_Xdivide);
DDX_Text(pDX, IDC_Title, m_Title);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSetDrawParaDialog, CDialog)
//{{AFX_MSG_MAP(CSetDrawParaDialog)
ON_BN_CLICKED(IDC_DrawCurver, OnDrawCurver)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSetDrawParaDialog message handlers
bool CSetDrawParaDialog::DrawGhapher(double xArray[],int xNum,double yArray[],int yNum)
{
int Xstart,Ystart,Xdivide,Ydivide,xN,yN;
double Xscale,Yscale;
CString tTemp;
////////////////////////////////////////////////////////////////////////////////////
//UpdateData(TRUE);
Xstart=m_Xstart;
Ystart=m_Ystart; //////////
Xdivide=m_Xdivide; ////////// /获得各项绘图参数
Ydivide=m_Ydivide; //////////
xN=m_xN;
yN=m_yN;
Xscale=m_Xscale;
Yscale=m_Yscale;
///////////////////////////////////////////////////////////////////////////////////////
CDC *pDC=GetDC();
////////////////////////////////////////////////////////////////////////////////////
////////// 绘制X-轴 ///////////////
////////////////////////////////////////////////////////////////////////////////////
GetMaxMinMid(xArray, xNum);
Xmax=Ximax;
Xmin=Ximin;
Xmid=Ximid;
pDC->MoveTo(Xstart,Ystart);
pDC->LineTo((int)(Xstart+Xscale*(Xmax-Xmin)),Ystart);
for(int i=0;i<xNum;i++)
{
pDC->MoveTo(Xstart+(int)(i*Xscale*(Xmax-Xmin)/Xdivide),Ystart);
pDC->LineTo(Xstart+(int)(i*Xscale*(Xmax-Xmin)/Xdivide),Ystart-5);
}
////////////////////////////////////////////////////////////////////////////////////
for(int i=0;i<=xNum;i=i+xN)
{
//pDC->MoveTo();
tTemp.Format("%5.1f",Xmin+i*(Xmax-Xmin)/Xdivide);
pDC->TextOut(Xstart+(int)(i*Xscale*(Xmax-Xmin)/Xdivide),Ystart+10,tTemp);
}
/////////////////// 绘制Y轴 ///////////////////
/////////////////////////////////////////////////////////////////////////////////////
GetMaxMinMid(yArray, yNum);
Ymax=Ximax;
Ymin=Ximin;
Ymid=Ximid;
pDC->MoveTo(Xstart,Ystart);
pDC->LineTo(Xstart,Ystart-(int)(Yscale*(Ymax-Ymin)));
for(int i=0;i<yNum;i++)
{
pDC->MoveTo(Xstart,(int)(i*Yscale*(Ymax-Ymin)/Ydivide)+Ystart);
pDC->LineTo(Xstart-10,(int)(i*Yscale*(Ymax-Ymin)/Ydivide)+Ystart);
}
////////////////////////////////////////////////////////////////////////////////////
for(int i=0;i<=yNum;i=i+yN)
{
//pDC->MoveTo();
tTemp.Format("%5.1f",Ymin+i*(Ymax-Ymin)/Ydivide);
pDC->TextOut(Xstart,Ystart-(int)(i*Yscale*(Ymax-Ymin)/Ydivide),tTemp);
}
/////////////////////////////////////////////////////////////////////////////////
//// 绘制曲线 ////
/////////////////////////////////////////////////////////////////////////////////
pDC->MoveTo(Xstart,Ystart-(int)((yArray[0]-Ymin)*Yscale*Ydivide/(Ymax-Ymin)));
for(int i=1;i<xNum,i<yNum;i++)
{
pDC->LineTo(Xstart+(int)((xArray[i]-Xmin)*Xscale*Xdivide/(Xmax-Xmin)),
Ystart-(int)((yArray[i]-Ymin)*Yscale*Ydivide/(Ymax-Ymin)));
}
//////////////////////////////////////////////////////////////////////////////////
::AfxMessageBox("Draw finish!");
return true;
}
bool CSetDrawParaDialog::GetMaxMinMid(double fArray[], int fN)
{
Xmax=Xmin=fArray[0];
for(int i=0;i<fN;i++)
{
if(fArray[i]>Xmax)
Ximax=fArray[i];
if(fArray[i]<Xmin)
Ximin=fArray[i];
}
Ximid=(Ximax+Ximin)/2.0;
return true;
}
void CSetDrawParaDialog::OnDrawCurver()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CDialog::OnOK();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -