📄 ac6611_02view.cpp
字号:
// AC6611_02View.cpp : implementation of the CAC6611_02View class
//
#include "stdafx.h"
#include "AC6611_02.h"
#include "AC6611_02Doc.h"
#include "AC6611_02View.h"
#include "MemDC.h"
#include "Dia_01.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAC6611_02View
IMPLEMENT_DYNCREATE(CAC6611_02View, CView)
BEGIN_MESSAGE_MAP(CAC6611_02View, CView)
//{{AFX_MSG_MAP(CAC6611_02View)
ON_COMMAND(IDM_Dia01, OnDia01)
//}}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()
/////////////////////////////////////////////////////////////////////////////
// CAC6611_02View construction/destruction
CAC6611_02View::CAC6611_02View()
{
// TODO: add construction code here
}
CAC6611_02View::~CAC6611_02View()
{
}
BOOL CAC6611_02View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CAC6611_02View drawing
void CAC6611_02View::OnDraw(CDC* pDC)
{
CAC6611_02Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC->SetBkColor(RGB(0,0,0));
CMemDC dc(pDC);
CRect rc;
GetClientRect(&rc);
int FontNum;
FontNum=rc.Width()/50 <= rc.Height()/50 ? rc.Width()/50 : rc.Height()/30;
if(FontNum<10)
{
FontNum=10;
}
CFont Font1,Font2,Font3,Font4,Font5;
Font1.CreateFont(FontNum, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,"Verdana");
Font2.CreateFont(FontNum*3/4, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,"Verdana");
CFont* oldFont = dc.SelectObject(&Font1);
CPen* pPenGray = new CPen;
CPen* pPenGreen = new CPen;
CPen* pPenRed=new CPen;
pPenGray->CreatePen(BS_SOLID,1,RGB(128,128,128));
pPenGreen->CreatePen(PS_DOT,1,RGB(0,255,0));
pPenRed->CreatePen(PS_SOLID,1,RGB(255,0,0));
//绘制X、Y轴网格 选择绿色画笔
dc.SelectObject(pPenGreen);
int s;
for (s = 0 ;s <= 14 ;s++)
{
if(s!=7)//平行y轴
{
dc.MoveTo(rc.Width()/100+s*rc.Width()*14/20/14,(rc.Height()*2/3)/75);
dc.LineTo(rc.Width()/100+s*rc.Width()*14/20/14,(rc.Height()*2/3)*74/75);
}
if(s<=10 && s!=5)//平行x轴
{
dc.MoveTo(rc.Width()/100,(rc.Height()*2/3)*1/75+s*(rc.Height()*2/3)*73/75/10);
dc.LineTo(rc.Width()/100+14*rc.Width()*14/20/14,(rc.Height()*2/3)*1/75+s*(rc.Height()*2/3)*73/75/10);
}
}
delete pPenGreen;
dc.SelectObject(pPenGray);//灰色分界线
dc.MoveTo(0, rc.Height()*2/3);
dc.LineTo(rc.Width(), rc.Height()*2/3);
delete pPenGray;
dc.SelectObject(pPenRed);//红色X、Y轴
//x轴
dc.MoveTo(rc.Width()/100, rc.Height()/3);
dc.LineTo(rc.Width()/100+14*rc.Width()*14/20/14, rc.Height()/3);
for(int j=0; j<=70; j++)
{
if((j%5)==0)
{
dc.MoveTo(rc.Width()/100+14*rc.Width()*14/20/14*j/70, rc.Height()/3-rc.Height()/3*6/200);
}
else
{
dc.MoveTo(rc.Width()/100+14*rc.Width()*14/20/14*j/70, rc.Height()/3-rc.Height()/3*3/200);
}
dc.LineTo(rc.Width()/100+14*rc.Width()*14/20/14*j/70, rc.Height()/3);
if(j<=50 && j!=25)
{
if((j%5)==0)
{
dc.MoveTo(rc.Width()/100+7*rc.Width()*14/20/14+rc.Width()*2/400, (rc.Height()*2/3)/75+(rc.Height()*2/3)*73*j/75/50);
}
else
{
dc.MoveTo(rc.Width()/100+7*rc.Width()*14/20/14+rc.Width()*1/400, (rc.Height()*2/3)/75+(rc.Height()*2/3)*73*j/75/50);
}
dc.LineTo(rc.Width()/100+7*rc.Width()*14/20/14, (rc.Height()*2/3)/75+(rc.Height()*2/3)*73*j/75/50);
}
}
//y轴
dc.MoveTo(rc.Width()/100+7*rc.Width()*14/20/14,(rc.Height()*2/3)/75);
dc.LineTo(rc.Width()/100+7*rc.Width()*14/20/14,(rc.Height()*2/3)*74/75);
delete pPenRed;
//版权
dc.SelectObject(&Font2);
dc.SetTextColor(RGB(255,255,0));
dc.TextOut(rc.Width()/100+rc.Width()*80/100, rc.Height()*2/3+rc.Height()/3*7/8, "AC6611 (C) 2004.12 V1.0");
dc.SelectObject(&Font1);
dc.SetTextColor(RGB(255,255,255));
dc.TextOut(rc.Width()*3/100+14.4*rc.Width()*14/20/14,rc.Height()*2/3/18-(rc.Height()*2/3)*2/75,"通道号");
dc.TextOut(rc.Width()*3/100+16*rc.Width()*14/20/14,rc.Height()*2/3/18-(rc.Height()*2/3)*2/75,"采样值");
dc.TextOut(rc.Width()*3/100+17.6*rc.Width()*14/20/14,rc.Height()*2/3/18-(rc.Height()*2/3)*2/75," 电压值");
/*//显示信息
if(m_BNTportio || m_BFileOpen)
{
if(G==1)
{
dc.TextOut(rc.Width()*2/100+7*rc.Width()*14/20/14,rc.Height()*2/3*3/75,"2V/div");
}
else
{
dc.TextOut(rc.Width()*2/100+7*rc.Width()*14/20/14,rc.Height()*2/3*3/75,"1V/div");
}
CString TimeY;
TimeY.Format("%.1fs / div",Speed/1000.0*75);
dc.TextOut(rc.Width()*2/100+12*rc.Width()*14/20/14,rc.Height()*2/3*33/75,TimeY);
CString strPara;
strPara.Format("起始通道:CH%d 停止通道:CH%d 输入范围:",StartCH,StopCH);
switch(MessageState)
{
case 1:
dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*1/4,"当前状态:实时采样、绘制波形");
dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*2/4,strPara+strG+SampleFreq);
break;
case 2:
dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*1/6,"当前状态:实时采样、保存数据");
dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*2/6,"文件路径:"+FileDataNameTxt);
dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*3/6,strPara+strG+SampleFreq);
dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*4/6,"当前采样点:"+SamNum);
break;
case 3:
dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*1/8,"当前状态:读取数据、绘制波形");
dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*2/8,"文件路径:"+FileName);
dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*3/8,strPara+strG+SampleFreq);
dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*4/8,"总采样点数:"+strFileLength);
dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*5/8,"播放起始点:"+strStartPoint);
dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*6/8,"当前数据点:"+DataCount);
break;
}
for(int k=0; k<16; k++)
{
dc.SetTextColor(SetColor(k));
if(k>=StartCH && k<=StopCH)
{
//显示通道号
CString str;
str.Format(" CH%d",k);
dc.TextOut(rc.Width()*3/100+14.4*rc.Width()*14/20/14,rc.Height()*2/3*(k+2)/18-(rc.Height()*2/3)*2/75,str);
//显示采样值
str.Format(" %d",data[k-StartCH]);
dc.TextOut(rc.Width()*3/100+16*rc.Width()*14/20/14,rc.Height()*2/3*(k+2)/18-(rc.Height()*2/3)*2/75,str);
//显示电压值
str.Format("%6.3fV",Convert(G,data[k-StartCH]));
dc.TextOut(rc.Width()*3/100+17.6*rc.Width()*14/20/14,rc.Height()*2/3*(k+2)/18-(rc.Height()*2/3)*2/75,str);
}
else
{
//显示通道号
CString str;
str.Format(" CH%d",k);
dc.TextOut(rc.Width()*3/100+14.4*rc.Width()*14/20/14,rc.Height()*2/3*(k+2)/18-(rc.Height()*2/3)*2/75,str);
//显示采样值
str=" ------";
dc.TextOut(rc.Width()*3/100+16*rc.Width()*14/20/14,rc.Height()*2/3*(k+2)/18-(rc.Height()*2/3)*2/75,str);
//显示电压值
dc.TextOut(rc.Width()*3/100+17.6*rc.Width()*14/20/14,rc.Height()*2/3*(k+2)/18-(rc.Height()*2/3)*2/75,str);
}
}
}
else
{
dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*1/4,Message);
dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*2/4,"您将无法进行与AC6611硬件相关的任何操作!");
for(int m=0; m<16; m++)
{
dc.SetTextColor(SetColor(m));
//显示通道号
CString str;
str.Format(" CH%d",m);
dc.TextOut(rc.Width()*3/100+14.4*rc.Width()*14/20/14,rc.Height()*2/3*(m+2)/18-(rc.Height()*2/3)*2/75,str);
//显示采样值
str=" ------";
dc.TextOut(rc.Width()*3/100+16*rc.Width()*14/20/14,rc.Height()*2/3*(m+2)/18-(rc.Height()*2/3)*2/75,str);
//显示电压值
dc.TextOut(rc.Width()*3/100+17.6*rc.Width()*14/20/14,rc.Height()*2/3*(m+2)/18-(rc.Height()*2/3)*2/75,str);
}
}
//绘制波形
for(OffsetCH=StartCH; OffsetCH<=StopCH; OffsetCH++)
{
if(GetCheckState(OffsetCH))
{
CPen* pPen=new CPen;
pPen->CreatePen(PS_SOLID,1,SetColor(OffsetCH));
dc.SelectObject(pPen);
int y1;
int y2;
for(int i=0; i<(int)SampleTimes; i++)
{
y1=(int)DataBuff[OffsetCH-StartCH+CHNumber*i]*((rc.Height()*2/3)*36/75)/4095;
y2=(int)(DataBuff[OffsetCH-StartCH+CHNumber*i]-2048)*(rc.Height()*2/3)*36/75/2048;
if(G==2)
{
if(y2>=(rc.Height()*2/3)*36/75)
y2=(rc.Height()*2/3)*36/75;
if(y2<=-(rc.Height()*2/3)*36/75)
y2=-(rc.Height()*2/3)*36/75;
if(i==0)
{
dc.MoveTo((SampleTimes-i+1)*14*rc.Width()*14/20/14/1500+rc.Width()/100,(rc.Height()/3-y2));
}
dc.LineTo((SampleTimes-i+1)*14*rc.Width()*14/20/14/1500+rc.Width()/100,(rc.Height()/3-y2));
}
else
{
if(y1>=(rc.Height()*2/3)*36/75)
y1=(rc.Height()*2/3)*36/75;
if(y1<=0.0)
y1=0;
if(i==0)
{
dc.MoveTo((SampleTimes-i)*14*rc.Width()*14/20/14/1500+rc.Width()/100,(rc.Height()/3-y1));
}
dc.LineTo((SampleTimes-i)*14*rc.Width()*14/20/14/1500+rc.Width()/100,(rc.Height()/3-y1));
}
}
delete pPen;
}
}*/
}
/////////////////////////////////////////////////////////////////////////////
// CAC6611_02View printing
BOOL CAC6611_02View::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CAC6611_02View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CAC6611_02View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CAC6611_02View diagnostics
#ifdef _DEBUG
void CAC6611_02View::AssertValid() const
{
CView::AssertValid();
}
void CAC6611_02View::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CAC6611_02Doc* CAC6611_02View::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CAC6611_02Doc)));
return (CAC6611_02Doc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CAC6611_02View message handlers
void CAC6611_02View::OnDia01()
{
// TODO: Add your command handler code here
CDia_01 dia01;
dia01.DoModal();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -