?? magneticproview.cpp
字號:
// MagneticProView.cpp : implementation of the CMagneticProView class
//
#include "stdafx.h"
#include "MagneticPro.h"
#include "MagneticProDoc.h"
#include "MagneticProView.h"
#include "SetDrawParaDialog.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMagneticProView
IMPLEMENT_DYNCREATE(CMagneticProView, CScrollView)
BEGIN_MESSAGE_MAP(CMagneticProView, CScrollView)
//{{AFX_MSG_MAP(CMagneticProView)
ON_COMMAND(ID_FILE_OPEN_MDATA, OnFileOpenMdata)
ON_COMMAND(ID_DRAW_CMDATA, OnDrawCMdata)
ON_COMMAND(ID_DRAW_SUN_CURVE, OnDrawSunCurve)
// ON_COMMAND(ID_EXCHANG_MAGNETIC, OnExchangMagnetic)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMagneticProView construction/destruction
CMagneticProView::CMagneticProView()
{
// TODO: add construction code here
m_bmp.LoadBitmap(IDB_BITMAP2);
}
CMagneticProView::~CMagneticProView()
{
}
BOOL CMagneticProView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CMagneticProView drawing
void CMagneticProView::OnDraw(CDC* pDC)
{
CMagneticProDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRect rc,memrc;
CDC *dc=GetDC(),memdc;
//dc.m_hDC=::GetDC();
memdc.CreateCompatibleDC(dc);
memdc.SelectObject(&m_bmp);
GetClientRect(&rc) ;
dc->BitBlt(rc.top,rc.left,rc.Width(),rc.Height()
,&memdc,rc.top,rc.left,SRCCOPY);
ReleaseDC(&memdc);
ReleaseDC(dc);
// TODO: add draw code for native data here
}
void CMagneticProView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx = sizeTotal.cy = 100;
SetScrollSizes(MM_TEXT, sizeTotal);
}
/////////////////////////////////////////////////////////////////////////////
// CMagneticProView printing
BOOL CMagneticProView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CMagneticProView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CMagneticProView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CMagneticProView diagnostics
#ifdef _DEBUG
void CMagneticProView::AssertValid() const
{
CScrollView::AssertValid();
}
void CMagneticProView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CMagneticProDoc* CMagneticProView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMagneticProDoc)));
return (CMagneticProDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMagneticProView message handlers
void CMagneticProView::OnFileOpenMdata()
{
// TODO: Add your command handler code here
}
/////////////////////////////////////////////////////////////////////////////
/////// 以下程序?qū)崿F(xiàn)繪制磁測數(shù)據(jù)功能 ////////////////
/////////////////////////////////////////////////////////////////////////////
{
// TODO: Add your command handler code here
CMagneticProDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//DrawGrapher(pDoc->XX,pDoc->mPointNum,pDoc->m_MData,pDoc->mPointNum);
for(int i=0;i<pDoc->mPointNum;i++)
{
fTemp[i]=pDoc->m_MData[i].mData;
}
DrawGrapher(pDoc->XX,pDoc->mPointNum,fTemp,pDoc->mPointNum);
}
void CMagneticProView::OnDrawSunCurve()
{
// TODO: Add your command handler code here
CMagneticProDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
for(int i=0;i<pDoc->sPointNum;i++)
{
fTemp[i]=pDoc->m_SData[i].mData;
}
DrawGrapher(pDoc->XX,pDoc->sPointNum,fTemp,pDoc->sPointNum);
}
bool CMagneticProView::DrawGrapher(double xArray[], int xNum, double yArray[], int yNum)
{
int Xstart,Ystart,Xdivide,Ydivide,xN,yN;
double Xscale,Yscale;
CString tTemp;
/////////////////////////////////////////////////////////////////////////////////////
CSetDrawParaDialog sdlg;
if(sdlg.DoModal())
{
;
}
else
{
return false;
}
////////////////////////////////////////////////////////////////////////////////////
//UpdateData(TRUE);
Xstart=sdlg.m_Xstart;
Ystart=sdlg.m_Ystart; //////////
Xdivide=sdlg.m_Xdivide; ////////// /獲得各項(xiàng)繪圖參數(shù)
Ydivide=sdlg.m_Ydivide; //////////
xN=sdlg.m_xN;
yN=sdlg.m_yN;
Xscale=sdlg.m_Xscale;
Yscale=sdlg.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<Xdivide;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<=Xdivide;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<Ydivide;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<=Ydivide;i=i+yN)
{
//pDC->MoveTo();
tTemp.Format("%5.1f",Ymin+i*(Ymax-Ymin)/Ydivide);
pDC->TextOut(Xstart-40,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)(i*Xscale/*(Xmax-Xmin)/xNum*/) /*(int)((xArray[i]-Xmin)*Xscale*Xdivide/(Xmax-Xmin))*/,
Ystart-(int)((yArray[i]-Ymin)*Yscale/*Ydivide*Yscale/(Ymax-Ymin)*/));
}
//////////////////////////////////////////////////////////////////////////////////
// ::AfxMessageBox("Draw finish!");
return true;
}
bool CMagneticProView::GetMaxMinMid(double fArray[], int xNum)
{
Xmax=Ximax=Ximid=fArray[0];
Xmin=Ximin=fArray[0];
for(int i=0;i<xNum;i++)
{
if(fArray[i]>Xmax)
Xmax=fArray[i];
if(fArray[i]<Xmin)
Xmin=fArray[i];
}
Ximax=Xmax;
Ximin=Xmin;
Ximid=(Ximax+Ximin)/2.0;
return true;
}
/*
void CMagneticProView::OnExchangMagnetic()
{
// TODO: Add your command handler code here
CMagneticProDoc::OnExchangMagnetic();
}
*/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -