📄 dataanalisisview.cpp
字号:
// dataanalisisView.cpp : implementation of the CDataanalisisView class
//
#include "stdafx.h"
#include "dataanalisis.h"
#include "Dlg_row.h"
#include "Dlg_cum.h"
#include "Dlg_zhishu.h"
#include "Dlg_moveavg.h"
#include "Dlg_location.h"
#include "Dlg_common.h"
#include "math.h"
#include "dataanalisisDoc.h"
#include "dataanalisisView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDataanalisisView
IMPLEMENT_DYNCREATE(CDataanalisisView, CView)
BEGIN_MESSAGE_MAP(CDataanalisisView, CView)
//{{AFX_MSG_MAP(CDataanalisisView)
ON_COMMAND(ID_START, OnStart)
ON_COMMAND(ID_CUM, OnCum)
ON_COMMAND(ID_ZHISHU, OnZhishu)
ON_COMMAND(ID_MOVEAVG, OnMoveavg)
ON_UPDATE_COMMAND_UI(ID_CUM, OnUpdateCum)
ON_UPDATE_COMMAND_UI(ID_ZHISHU, OnUpdateZhishu)
ON_UPDATE_COMMAND_UI(ID_MOVEAVG, OnUpdateMoveavg)
ON_UPDATE_COMMAND_UI(ID_START, OnUpdateStart)
ON_WM_RBUTTONDOWN()
ON_COMMAND(PREDICT, OnPREDICT)
ON_COMMAND(MoveP, OnMoveP)
//}}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()
/////////////////////////////////////////////////////////////////////////////
// CDataanalisisView construction/destruction
CDataanalisisView::CDataanalisisView()
{
// TODO: add construction code here
flag=1;//表示一种默认的选择
}
CDataanalisisView::~CDataanalisisView()
{
}
BOOL CDataanalisisView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CDataanalisisView drawing
void CDataanalisisView::OnDraw(CDC* pDC)
{
CDataanalisisDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
extern int n;
extern double x[];
extern double y[];
double a=10,b=500,dx=10;
double x1,y1,x2,y2;
double x_min,y_min,x_max,y_max;//函数的极小值和极大值的坐标
CPen pen,*p_pen;
CString str;
CRect rc;
for(y_min=y_max=f(x_min=x_max=x1=a);x1<b+dx*0.5;x1+=dx)
{
y1=f(x1);
if(y1<y_min)
{
x_min=x1;y_min=y1;//侯选的极小值点
}
if(y1>y_max)
{
x_max=x1;y_max=y1;//侯选的极大值点
}
}
GetClientRect(&rc);
str.Format("min: F(%.3f)=%.3f,max:F(%.3f)=%.3f,y_ext=%.3f",x_min,y_min,x_max,y_max,y_max-y_min);
pDC->DrawText(str,&rc,DT_BOTTOM|DT_SINGLELINE|DT_CENTER);//显示极值数据以及值域高度
x2=(rc.right-b+a)*0.5;
pDC->MoveTo(x2,0);
pDC->LineTo(x2,rc.bottom);
y2=-y_min/(y_max-y_min)*rc.bottom;
pDC->MoveTo(0,rc.bottom-y2);
pDC->LineTo(rc.right,rc.bottom-y2);
pen.CreatePen(PS_SOLID,3,RGB(0,0,255));
p_pen=pDC->SelectObject(&pen);
for(x1=a;x1<b+dx*0.5;x1+=dx)
{
y1=rc.bottom-(f(x1)+y2);
if(flag)//使用折线方式画曲线
if(x1==a)
pDC->MoveTo(x1+x2,y1);//在起点落笔
else
pDC->LineTo(x1+x2,y1);//向下一点连折线
else //离散方式
pDC->Ellipse(x1+x2-3,y1-3,x1+x2+4,y1+4);
}
pDC->SelectObject(p_pen);
pen.DeleteObject();
}
/////////////////////////////////////////////////////////////////////////////
// CDataanalisisView printing
BOOL CDataanalisisView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CDataanalisisView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CDataanalisisView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CDataanalisisView diagnostics
#ifdef _DEBUG
void CDataanalisisView::AssertValid() const
{
CView::AssertValid();
}
void CDataanalisisView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CDataanalisisDoc* CDataanalisisView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDataanalisisDoc)));
return (CDataanalisisDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CDataanalisisView message handlers
void CDataanalisisView::OnStart()
{
// TODO: Add your command handler code here
Menu_NO=1;
CDlg_row row;
row.DoModal();
}
void CDataanalisisView::OnPREDICT()
{
// TODO: Add your command handler code here
Menu_NO=2;
CDlg_common common;
common.DoModal();
}
void CDataanalisisView::OnCum()
{
// TODO: Add your command handler code here
//Menu_NO=2;
//CDlg_cum cum;
//cum.DoModal();
}
void CDataanalisisView::OnZhishu()
{
// TODO: Add your command handler code here
//Menu_NO=3;
//CDlg_zhishu zhishu;
//zhishu.DoModal();
}
void CDataanalisisView::OnMoveavg()
{
// TODO: Add your command handler code here
//Menu_NO=4;
//CDlg_moveavg moveavg;
//moveavg.DoModal();
}
void CDataanalisisView::OnUpdateStart(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
if(Menu_NO==1)
pCmdUI->SetCheck(1);
else
pCmdUI->SetCheck(0);
}
void CDataanalisisView::OnUpdateCum(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
if(Menu_NO==2)
pCmdUI->SetCheck(1);
else
pCmdUI->SetCheck(0);
}
void CDataanalisisView::OnUpdateZhishu(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
// if(Menu_NO==3)
// pCmdUI->SetCheck(1);
//else
// pCmdUI->SetCheck(0);
}
void CDataanalisisView::OnUpdateMoveavg(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
// if(Menu_NO==4)
// pCmdUI->SetCheck(1);
//else
// pCmdUI->SetCheck(0);
}
double CDataanalisisView::f(double x)
{
extern double minlicha,licha1,licha2,licha3,licha4;
extern double k,b1,a,b,c,k1,a1,k3,a3;
if(minlicha==licha1)
return k*x+b1;
if(minlicha==licha2)
return a*x*x+b*x+c;
if(minlicha==licha3)
return k1*pow(a1,x);
if(minlicha==licha4)
return k3*log(x)/log(a3);
UpdateData(false);
}
void CDataanalisisView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
flag=!flag;
InvalidateRect(NULL);
CView::OnRButtonDown(nFlags, point);
}
void CDataanalisisView::OnMoveP()
{
// TODO: Add your command handler code here
// CDlg_cum cum;
// cum.DoModal();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -