📄 timeview.cpp
字号:
// TimeView.cpp : implementation file
//
#include "stdafx.h"
#include "fft.h"
#include "TimeView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTimeView
IMPLEMENT_DYNCREATE(CTimeView, CView)
CTimeView::CTimeView()
{
}
CTimeView::~CTimeView()
{
}
BEGIN_MESSAGE_MAP(CTimeView, CView)
//{{AFX_MSG_MAP(CTimeView)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTimeView drawing
void CTimeView::OnDraw(CDC* pDC)
{
CFFTDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);
CString str;
int i;
CRect rc;GetClientRect(rc);
if(rc.Height()<=100||rc.Width()<=100)return;
CPoint pcenter1(rc.left,rc.top+rc.Height()/2-2),pcenter2(rc.right,rc.top+rc.Height()/2-2);
CPen pWhite(PS_SOLID,1,RGB(255,255,255));
CPen pGray(PS_SOLID,1,RGB(192,192,192));
CPen pDark(PS_SOLID,1,RGB(96,96,96));
CPen pBlue(PS_SOLID,2,RGB(0,0,255));
CPen pGrid(PS_DOT,1,RGB(0,96,0));
//写标题
pDC->SetTextColor(RGB(0,0,128));
pDC->TextOut(rc.left+rc.Width()/2-40,rc.top,"时域波形");
//画窗格
CRect rtime;
rtime.top=rc.top+30;rtime.bottom =rc.bottom-30;
rtime.left =rc.left+10;rtime.right =rc.right-10;
pDC->TextOut(rtime.left-5,rtime.bottom+5,"0");
if(pDoc->m_bPower) str.Format("%d",pDoc->estsize);
else str.Format("%d",pDoc->N);
pDC->TextOut(rtime.right-30,rtime.bottom+5,str);//N
pDC->SelectObject(&pGrid);
int wnum,hnum;
wnum=rtime.Width()/40;
hnum=rtime.Height()/40;
for(i=0;i<=wnum;i++)//画竖线
{pDC->MoveTo(rtime.left+i*rtime.Width()/wnum,rtime.top);
pDC->LineTo(rtime.left+i*rtime.Width()/wnum,rtime.bottom);
}
for(i=0;i<=hnum;i++)//画横线
{pDC->MoveTo(rtime.left,rtime.top+i*rtime.Height()/hnum);
pDC->LineTo(rtime.right,rtime.top+i*rtime.Height()/hnum);
}
//时域波形
pDC->SelectObject(&pBlue);
double ys,xs;
int signa=0,signb=0,y0;
str.Format("%e",pDoc->tym);
pDC->TextOut(rtime.left,rtime.top-20,str);//tym
if(pDoc->m_bPower){
for(i=0;i<pDoc->estsize;i++) {
if (pDoc->sigfloat[i]>fabs(pDoc->tym/20)) signa=1;
if (pDoc->sigfloat[i]<-fabs(pDoc->tym/20)) signb=1;
}
if ((signa==1)&&(signb==1)) ys=(double)(rtime.Height()>>1)/pDoc->tym;
else ys=(double)(rtime.Height()/pDoc->tym);
y0=rtime.top+rtime.Height()/2;
xs=(double)(rtime.Width())/pDoc->estsize;
if((signa==1)&&(signb==0)) y0=rtime.bottom;
else if((signb==1)&&(signa==0)) y0=rtime.top;
for(i=0;i<(pDoc->estsize)-1;i++)
{pDC->MoveTo(xs*i+rtime.left,y0-pDoc->sigfloat[i]*ys);
pDC->LineTo(xs*(i+1)+rtime.left,y0-pDoc->sigfloat[i+1]*ys);}
}//sigfloat[estsize]
else{ys=(double)(rtime.Height())/pDoc->tym;
xs=(double)(rtime.Width())/pDoc->N;
for(i=0;i<(pDoc->N)-1;i++)
{pDC->MoveTo(xs*i+rtime.left,rtime.bottom-pDoc->tamp[i]*ys);
pDC->LineTo(xs*(i+1)+rtime.left,rtime.bottom-pDoc->tamp[i+1]*ys);}}
}
/////////////////////////////////////////////////////////////////////////////
// CTimeView diagnostics
#ifdef _DEBUG
void CTimeView::AssertValid() const
{
CView::AssertValid();
}
void CTimeView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CFFTDoc* CTimeView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CFFTDoc)));
return (CFFTDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CTimeView message handlers
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -