📄 myworkview.cpp
字号:
// MyWorkView.cpp : implementation of the CMyWorkView class
#include "stdafx.h"
#include "MyWork.h"
#include "selectDialog.h"
#include "luruDialog.h"
#include "MyWorkDoc.h"
#include "MyWorkView.h"
#include "ADSetup.h"
#include "Set2.h"
#include "DataSaveDialog.h"
#include "FinishAD.h"
#include "Set1.h"
#include "dll2.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMyWorkView
IMPLEMENT_DYNCREATE(CMyWorkView, CView)
BEGIN_MESSAGE_MAP(CMyWorkView, CView)
//{{AFX_MSG_MAP(CMyWorkView)
ON_COMMAND(IDM_FIND, OnFind)
ON_COMMAND(IDM_LURU, OnLuru)
ON_COMMAND(IDB_TIME, OnTime)
ON_WM_TIMER()
ON_COMMAND(IDB_SEZI, OnSezi)
ON_COMMAND(IDB_START, OnStart)
ON_COMMAND(IDB_PAUSE, OnPause)
ON_COMMAND(IDB_SAVEDATA, OnSavedata)
ON_COMMAND(ID_PIC_EMPLIFY, OnPicEmplify)
ON_COMMAND(ID_PIC_SHRINK, OnPicShrink)
ON_COMMAND(ID_FOUR, OnFour)
ON_COMMAND(ID_ONE, OnOne)
ON_COMMAND(ID_SIXTTEEN, OnSixtteen)
ON_COMMAND(ID_TWO, OnTwo)
ON_COMMAND(ID_EIGHT, OnEight)
ON_COMMAND(ID_Y_TWO, OnYTwo)
ON_COMMAND(ID_Y_EIGHT, OnYEight)
ON_COMMAND(ID_Y_FOUR, OnYFour)
ON_COMMAND(ID_Y_ONE, OnYOne)
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
//}}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()
/////////////////////////////////////////////////////////////////////////////
// CMyWorkView construction/destruction
CMyWorkView::CMyWorkView()
{
// TODO: add construction code here
doc_m=0;
y_emply=1;
ratio=0;
x=70;
circle_num=0;
mask=true;
advance=1;
local=0;
circle_number=1;
m=0;
mm=0;
finishing=false;
div_label=false;
// scale=5;
m_con=1;
ready=true;
nTime=false;
stoping=false;
starting=false;
label=true;
n=-1;
m_Set=NULL;
m_set3=NULL;
}
CMyWorkView::~CMyWorkView()
{
}
BOOL CMyWorkView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CMyWorkView drawing
void CMyWorkView::OnDraw(CDC* pDC)
{
////////////////////////
CMyWorkDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRect r;
GetClientRect(r);
pDC->FillSolidRect(r,RGB(100,150,200));
pDC->SetTextColor(RGB(255,0,255));//选择前景色
CPen hp;
hp.CreatePen(PS_SOLID,1,RGB(255,255,0));//红色
pDC->SelectObject(&hp);
///////////////////////////////////////////////////////////////
if (GetDocument()->open_flag)
{
for (int minn=0;minn<=GetDocument()->doc_number;minn++)
{
rate[minn]=int(((1.25*2/4095)*ad_buffer2[minn]-1.25)/ratio);
volt_y[minn]=150+rate[minn];
time_x[minn]=60+minn*7;
}
pDC->MoveTo(60,150);
for (int maxx=0;maxx<=GetDocument()->doc_number-2;maxx++)
{
pDC->LineTo(time_x[maxx],volt_y[maxx]);
pDC->MoveTo(time_x[maxx],volt_y[maxx]);
}
}
// 获取系统时钟
if (nTime)
{
CTime thetime;
thetime=CTime::GetCurrentTime();
CString s=thetime.Format("%H:%M:%S %A,%B %d,%Y");
pDC->TextOut(350,0,s);
}
if (starting)
{
pDC->TextOut(x,30,"正在采集过程中''''''''");
x=x+50;
RECT re;
GetClientRect(&re);
if (x>re.right-re.left)
x=70;
}
// SetTimer(1,1000,NULL);
//画坐标轴
POINT point_y[5]={{60,250},{60,200},{60,150},{60,100},{60,50}};
POINT zb[5]={{5,240},{5,190},{5,140},{5,90},{5,40}};
pDC->MoveTo(point_y[0]);
pDC->LineTo(point_y[4]);
pDC->MoveTo(point_y[0]);
pDC->LineTo(799,250);
pDC->TextOut(700,220,"采样时间轴");
pDC->TextOut(40,1,"输入电压(V)");
pDC->TextOut(250,1,"模拟信号");
//显示坐标比例:
CString zuo_biao;
switch (advance)
{
case 1: zuo_biao="采集参数: 此时每隔1秒绘一个采样点";break;
case 2: zuo_biao="采集参数: 此时每隔2秒绘一个采样点"; break;
case 4: zuo_biao="采集参数: 此时每隔4秒绘一个采样点"; break;
case 8: zuo_biao="采集参数: 此时每隔8秒绘一个采样点"; break;
case 16:zuo_biao="采集参数: 此时每隔16秒绘一个采样点"; break;
default:break;
}
pDC->TextOut(320,260,zuo_biao);
//画纵坐标点;
pDC->MoveTo(60,200);
pDC->LineTo(64,200);
pDC->MoveTo(60,150);
pDC->LineTo(64,150);
pDC->MoveTo(60,100);
pDC->LineTo(64,100);
pDC->MoveTo(60,50);
pDC->LineTo(64,50);
//画箭头
pDC->MoveTo(60,50);
pDC->LineTo(60,30);
pDC->MoveTo(55,30);
pDC->LineTo(65,30);
pDC->LineTo(60,23);
pDC->MoveTo(55,30);
pDC->LineTo(60,23);
div_t div_x;
//画横坐标
for (int x=0;x<=100;x++)
{
div_x=div(x,5);
if (div_x.rem==0)
{
pDC->MoveTo(60+x*7,250);
pDC->LineTo(60+x*7,243);
}
else
{
pDC->MoveTo(60+x*7,250);
pDC->LineTo(60+x*7,247);
}
}
//坐标尺度
CString vol_n1[5]={"-5.00","-2.50","0.00","2.50","5.00"};
CString vol_n2[5]={"-2.50","-1.25","0.00","1.25","2.50"};
CString vol_n4[5]={"-1.25","-0.625","0.00","0.625","1.25"};
CString vol_n8[5]={"-0.625","-0.3125","0.00","0.3125","0.625"};
CString vol_n16[5]={"-0.3125","-0.1562","0.00","0.1562","0.3125"};
//初始化纵坐标;
for (int i=0;i<=4;i++)
{
int x_label,y_label;
x_label=zb[i].x;
y_label=zb[i].y;
pDC->TextOut(x_label,y_label,vol_n1[i]);
}
if (m_main_gain=="-5(V)--5(V)")
{
for (int i=0;i<=4;i++)
{
int x_label,y_label;
x_label=zb[i].x;
y_label=zb[i].y;
pDC->TextOut(x_label,y_label,vol_n1[i]);
}
}
if (m_main_gain=="-2.5(V)--2.5(V)")
{
for (int i=0;i<=4;i++)
{
int x_label,y_label;
x_label=zb[i].x;
y_label=zb[i].y;
pDC->TextOut(x_label,y_label,vol_n2[i]);
}
}
if (m_main_gain=="-1.25(V)--1.25(V)")
{
for (int i=0;i<=4;i++)
{
int x_label,y_label;
x_label=zb[i].x;
y_label=zb[i].y;
pDC->TextOut(x_label,y_label,vol_n4[i]);
}
}
if (m_main_gain=="-0.625(V)--0.625(V)")
{
for (int i=0;i<=4;i++)
{
int x_label,y_label;
x_label=zb[i].x;
y_label=zb[i].y;
pDC->TextOut(x_label,y_label,vol_n8[i]);
}
}
if (m_main_gain=="-0.3125(V)--0.3125(V)")
{
for (int i=0;i<=4;i++)
{
int x_label,y_label;
x_label=zb[i].x;
y_label=zb[i].y;
pDC->TextOut(x_label,y_label,vol_n16[i]);
}
}
//求每单位坐标代表的电压值:
// double ratio; /////////////////////////////6.27号改
switch (ad_gain)
{
case 0:
{
ratio=0.05;
scale=5;
break;
}
case 1:
{
ratio=0.025;
scale=2.5;
break;
}
case 2:
{
ratio=0.0125;
scale=1.25;
break;
}
case 3:
{
ratio=0.00625;
scale=0.625;
break;
}
case 4:
{
ratio=0.003125;
scale=0.3125;
break;
}
case 5:
{
ratio=0.00165;
scale=0.156;
break;
}
///////////////
case 6:
{
ratio=0.00055;
scale=0.055;
}
///////////////////
default: break;
}
// 计算相对坐标值
//计算描多少个点:
int point_div,point_mod;
div_t div_result;
div_result=div(100,10);
if (div_result.rem==0)
{
point_div=div_result.quot;
point_mod=0;
}
else{
point_div=div_result.quot;
point_mod=div_result.rem;
}
///////////////////////////////////
////////求输入电压转化成实际坐标值
/* for (int m=0;m<=real_count-1;m++)
{
rate[m]=int((2.5/4095*ad_buffer[m]-1.25)/ratio);
volt_y[m]=150+rate[m];
time_x[m]=60+m*10;
}*/
//画曲线是画图曲线为黄色:
DeleteObject(hp);
CPen hp1;
hp1.CreatePen(PS_SOLID,1,RGB(255,255,0));//黄色
pDC->SelectObject(&hp1);
//pDC->MoveTo(60,150);
if (starting)
{
W_711B_AD_INT_Status( &status, &real_count );
if (status!=0)
//if (real_count<=m_main_ratio*10*60*m_main_time)
{
//////////////////////////
//求平均值:
int sum;
sum=0;
for(int i=0;i<=9;i++)
{
n=n+1;
sum=sum+ad_buffer1[n];
if (n>=real_count)
goto repeat;
}
repeat: avg[m]=int(sum/10);
////////////////////////////
//换算坐标值:
for (int min=0;min<=m;min++)
{
if (mask)
{
rate[min]=int(((scale*2/4095)*ad_buffer1[min]-scale)/ratio)*y_emply;
mask=false;
ad_data[min]=ad_buffer1[min];
volt_y[min]=150+rate[min];
time_x[min]=60+min*7;
}
else
{
if (min*advance*m_main_ratio*10<=(real_count-1))
{
rate[min]=int(((scale*2/4095)*ad_buffer1[min*advance*m_main_ratio*10]-scale)/ratio)*y_emply;
ad_data[min]=ad_buffer1[min*advance*m_main_ratio*10];
volt_y[min]=150+rate[min];
time_x[min]=60+min*7;
}
else
{
rate[min]=rate[min-1];//int(((scale*2/4095)*ad_buffer1[real_count-1]-scale)/ratio);
ad_data[min]=ad_data[min-1];
volt_y[min]=150+rate[min];
time_x[min]=time_x[min-1];
}
}
}
//把已描的点画出来:
pDC->MoveTo(60,150);
for (int max=0;max<=m;max++) // m;
{
pDC->LineTo(time_x[max],volt_y[max]);
pDC->MoveTo(time_x[max],volt_y[max]);
}
m=m+1;////////////////////
SetTimer(2,1000*advance,NULL);
}
else
{
W_711B_AD_INT_Stop( &real_count );
starting=false;
stoping=false;/////////////////////////////////
finishing=true;
KillTimer(2);
//初始化菜单:
CMenu *pMenu1,*SubMenu1;
pMenu1=AfxGetMainWnd()->GetMenu();
SubMenu1=pMenu1->GetSubMenu(6);
SubMenu1->CheckMenuItem(IDB_START,MF_UNCHECKED);
CMenu *pMenu2,*SubMenu2;
pMenu2=AfxGetMainWnd()->GetMenu();
SubMenu2=pMenu2->GetSubMenu(6);
SubMenu2->CheckMenuItem(IDB_PAUSE,MF_UNCHECKED);
doc_m=m;//////////////////////////////////////////
m=0;
CFinishAD dlg;
dlg.DoModal();
}
}
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CMyWorkView printing
BOOL CMyWorkView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CMyWorkView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CMyWorkView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CMyWorkView diagnostics
#ifdef _DEBUG
void CMyWorkView::AssertValid() const
{
CView::AssertValid();
}
void CMyWorkView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CMyWorkDoc* CMyWorkView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyWorkDoc)));
return (CMyWorkDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMyWorkView message handlers
void CMyWorkView::OnFind()
{
// TODO: Add your command handler code here
CselectDialog dlg;
dlg.DoModal();
}
void CMyWorkView::OnLuru()
{
// TODO: Add your command handler code here
CluruDialog dlg;
dlg.DoModal();
}
void CMyWorkView::OnTime()
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -