📄 shaoyeview.cpp
字号:
// ShaoYeView.cpp : implementation of the CShaoYeView class
//
#include "stdafx.h"
#include "ShaoYe.h"
#include "ShaoYeDoc.h"
#include "ShaoYeView.h"
#include "flowset.h"
#include "global_fun.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CShaoYeView
extern BOOL m_bStart;
extern BOOL m_bStop;
extern CSampleResult m_sampleresult;
IMPLEMENT_DYNCREATE(CShaoYeView, CView)
BEGIN_MESSAGE_MAP(CShaoYeView, CView)
//{{AFX_MSG_MAP(CShaoYeView)
ON_WM_TIMER()
ON_WM_CREATE()
ON_COMMAND(ID_CON_START, OnConStart)
ON_COMMAND(ID_CON_STOP, OnConStop)
ON_UPDATE_COMMAND_UI(ID_CON_START, OnUpdateConStart)
ON_UPDATE_COMMAND_UI(ID_CON_STOP, OnUpdateConStop)
//}}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()
/////////////////////////////////////////////////////////////////////////////
// CShaoYeView construction/destruction
CShaoYeView::CShaoYeView()
{
// TODO: add construction code here
array_num=0;
}
CShaoYeView::~CShaoYeView()
{
}
BOOL CShaoYeView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CShaoYeView drawing
void CShaoYeView::OnDraw(CDC* pDC)
{
CShaoYeDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
AfxGetMainWnd()->SetWindowText("锌液流量实时监测");
CPen CyanPen(PS_SOLID, 1, RGB(128,128,128));
CPen BluePen(PS_SOLID, 3, RGB( 0, 0, 255 ));
CPen VioletPen(PS_SOLID,1,RGB( 255, 0, 255 ));
// CPen YellowPen(PS_SOLID, 1, RGB(255, 255, 0 ));
// CPen RedPen(PS_SOLID,1, RGB(255, 0, 0 ));
RECT rect;
GetClientRect(&rect);
pDC->SetMapMode(MM_TEXT);
pDC->SetViewportOrg(50,660);
pDC->SelectObject(BluePen);
pDC->MoveTo(0,-620);
pDC->LineTo(0,0);
pDC->LineTo(950,0);
pDC->MoveTo(0,-620);//画箭头
pDC->LineTo(-3,-600);
pDC->LineTo(3,-600);
pDC->LineTo(0,-620);
pDC->MoveTo(950,0);//画箭头
pDC->LineTo(930,-3);
pDC->LineTo(930,3);
pDC->LineTo(950,0);
//划纵坐标
pDC->SelectObject(CyanPen);
for(int i=0;i<=15;i++)
{
pDC->MoveTo(i*60,3);
pDC->LineTo(i*60,-580);
}
for(i=0;i<=5;i++)
{
CTime time = CTime::GetCurrentTime()+CTimeSpan(0,0,0,i*180)-CTimeSpan(0,0,0,900);
CString str=time.Format("%H:%M:%S");
pDC->TextOut(i*180-25,5,str);
}
pDC->TextOut(935,5,"时间");
//划横坐标
for(i=0;i<11;i++)
{
pDC->MoveTo(-3,-55*i);
pDC->LineTo(910,-55*i);
CString str1;
str1.Format("%4.1f",16+0.8*i);
pDC->TextOut(-32,-55*i-8,str1);
}
pDC->TextOut(-38,-610,"流量");
pDC->TextOut(-48,-590,"(吨/班)");
pDC->SetTextColor(RGB(255,0,0));
pDC->TextOut(400,-630,"F4");
pDC->TextOut(500,-630,"F5");
pDC->TextOut(600,-630,"F6");
pDC->TextOut(700,-630,"F7");
pDC->SetTextColor(RGB(0,0,255));
pDC->TextOut(375,-610,"流量统计");
pDC->TextOut(475,-610,"曲线(小时)");
pDC->TextOut(575,-610,"曲线(班次)");
pDC->TextOut(680,-610,"异常数据");
if(!m_bStart)
{
pDC->SetTextColor(RGB(128,128,128));
pDC->TextOut(200,-630,"F2");
pDC->TextOut(180,-610,"开 始");
pDC->SetTextColor(RGB(255,0,0));
pDC->TextOut(300,-630,"F3");
pDC->SetTextColor(RGB(0,0,255));
pDC->TextOut(280,-610,"停 止");
}
else
{
pDC->SetTextColor(RGB(255,0,0));
pDC->TextOut(200,-630,"F2");
pDC->SetTextColor(RGB(0,0,255));
pDC->TextOut(180,-610,"开 始");
pDC->SetTextColor(RGB(128,128,128));
pDC->TextOut(300,-630,"F3");
pDC->TextOut(280,-610,"停 止");
}
// CFont font;
// font=CreateFont(20,20,0,0,0,0,0,0,0,0,0,0,0);
//显示流量值
CRect rect1;
CBrush brush(RGB(255,0,0));
for(i=0;i<array_num;i++)
{
rect1=CRect((31-array_num+i)*30+2,-(int)((pDoc->dynamic_array[i]-16)*550/(24-16))-2,(31-array_num+i)*30-2,-(int)((pDoc->dynamic_array[i]-16)*550/(24-16))+2);
pDC->FillRect(rect1,&brush);
CString str;
str.Format("%2.2f",pDoc->dynamic_array[i]);
if((pDoc->dynamic_array[i]>24)||(pDoc->dynamic_array[i]<16))
pDC->SetTextColor(RGB(255,0,0));
else
pDC->SetTextColor(RGB(0,0,0));
if(i%2)
//下面
pDC->TextOut((31-array_num+i)*30-15,-(int)((pDoc->dynamic_array[i]-16)*550/(24-16)-10),str);
else
pDC->TextOut((31-array_num+i)*30-20,-(int)((pDoc->dynamic_array[i]-16)*550/(24-16)+25),str);
}
//流量值连线
pDC->SelectObject(VioletPen);
for(i=0;i<array_num-1;i++)
{
pDC->MoveTo((31-array_num+i)*30,-(int)((pDoc->dynamic_array[i]-16)*550/(24-16)));
pDC->LineTo((32-array_num+i)*30,-(int)((pDoc->dynamic_array[i+1]-16)*550/(24-16)));
}
ReleaseDC(pDC);
}
/////////////////////////////////////////////////////////////////////////////
// CShaoYeView printing
BOOL CShaoYeView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CShaoYeView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CShaoYeView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CShaoYeView diagnostics
#ifdef _DEBUG
void CShaoYeView::AssertValid() const
{
CView::AssertValid();
}
void CShaoYeView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CShaoYeDoc* CShaoYeView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CShaoYeDoc)));
return (CShaoYeDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CShaoYeView message handlers
void CShaoYeView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CShaoYeDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// Flux_filter[sample_count]=convert_flux()*28.8;//采样流量(班/吨)
Flux_filter[sample_count]=(rand()%13+56)*28.8/100.0;
sample_count++;
if(sample_count==50)
{
sample_count=0;
pDoc->AveFlow=Digital_filter(Flux_filter);
show_count++;
if(show_count==6)
{
pDoc->show_flag=true;
if(array_num<31)
{
pDoc->dynamic_array[array_num]=pDoc->AveFlow;
array_num++;
}
else
{
for(int i=0;i<array_num-1;i++)
pDoc->dynamic_array[i]=pDoc->dynamic_array[i+1];
pDoc->dynamic_array[array_num-1]=pDoc->AveFlow;
}
InvalidateRect( NULL, TRUE );
UpdateWindow();
show_count=0;
}
CString strdate,strsearch;
CTime time=CTime::GetCurrentTime();
strdate.Format("%4d-%02d-%02d",time.GetYear(),time.GetMonth(),time.GetDay());
second_now=time.GetSecond();
int second_dif=second_now-second_pre;
if(second_dif<0) second_dif+=60;
second_pre=second_now;
//添加记录+++++
if(m_sampleresult.IsOpen())
{
m_sampleresult.AddNew();
m_sampleresult.m_sample_time=720*time.GetHour()+12*time.GetMinute()+(int)time.GetSecond()/5;
m_sampleresult.m_flux=pDoc->AveFlow;
m_sampleresult.Update();
}
int period=time.GetHour();
strsearch.Format("%d",period);
strsearch="[日期]='"+strdate+"' and [时段]="+strsearch;
if((m_AddFlux.Find(AFX_DAO_FIRST,strsearch)))
{
m_AddFlux.Edit();
pDoc->TotalFlow=pDoc->AveFlow*second_dif/28.8+m_AddFlux.m_nFlow;
m_AddFlux.m_nFlow=pDoc->TotalFlow;
m_AddFlux.Update();
}
else
{
m_AddFlux.AddNew();
m_AddFlux.m_strDate=strdate;
m_AddFlux.m_nRange=time.GetHour();
pDoc->TotalFlow=pDoc->AveFlow*second_dif/28.8;
m_AddFlux.m_nFlow=pDoc->AveFlow*second_dif/28.8;
m_AddFlux.Update();
}
}
CView::OnTimer(nIDEvent);
}
int CShaoYeView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
return 0;
}
float CShaoYeView::Digital_filter(float a[])
{
float temp;
int i,j;
for(j=1;j<50;j++)
{
for(i=j;i>0;i--)
{
if(a[i]<a[i-1])
{
temp=a[i];
a[i]=a[i-1];
a[i-1]=temp;
}
else break;
}
}
temp=0;
for(i=10;i<40;i++)
temp+=a[i];
return temp/30;
}
void CShaoYeView::OnConStart()
{
// TODO: Add your command handler code here
m_bStart=false;
m_bStop=true;
InvalidateRect( NULL, TRUE );
UpdateWindow();
CString str;
str="已经开始工作!";
// AfxGetMainWnd()->m
CTime time;
time=CTime::GetCurrentTime();
CString querystr,delstr;
BOOL flag=true;//创建新表的标记,若有此表,则为flg=false
int year,month,day;
year=time.GetYear();
month=time.GetMonth();
day=time.GetDay();
querystr.Format("%4d%02d%02d",year,month,day);
if(month==1||month==2)
{
year=year-1;
month=month+10;
}
else
{
month=month-2;
}
delstr.Format("%4d%02d",year,month);
CDaoDatabase m_DB;
try
{
m_DB.Open("e:\\shaoye\\test_result.mdb");
CDaoTableDefInfo tabledefinfo;
int tb_num=m_DB.GetTableDefCount();//数据库中表的个数
CString tb_name;
for(int i=0;i<tb_num;i++)
{
m_DB.GetTableDefInfo(i,tabledefinfo);
tb_name=tabledefinfo.m_strName;
//删除一个月前的数据
if(tb_name.Left(6)==delstr)
{
m_DB.DeleteTableDef(tb_name);
i=i-1;
}
//查找是否有此数据表
if(tb_name==querystr)
{
flag=false;
break;
}
}
/* //产生测试数据
for(int k=1;k<=31;k++)
{
CDaoTableDef *pTableSet;
pTableSet=new CDaoTableDef(&m_DB);
querystr.Format("200112%02d",k);
pTableSet->Create(querystr);
pTableSet->CreateField("time",dbInteger,dbFixedField);
pTableSet->CreateField("flux",dbSingle,dbFixedField);
pTableSet->Append();
}*/
if(flag)
{
CDaoTableDef *pTableSet;
pTableSet=new CDaoTableDef(&m_DB);
pTableSet->Create(querystr);
pTableSet->CreateField("time",dbInteger,dbFixedField);
pTableSet->CreateField("flux",dbSingle,dbFixedField);
pTableSet->Append();
}
else
{
}
}
catch(CDaoException *e)
{
e->Delete();
MessageBox("无法打开数据库","错误",MB_OK);
}
m_AddFlux.Open();
m_sampleresult.Open();
sample_count=0;
array_num=0;
show_count=0;
time=CTime::GetCurrentTime();
second_pre=time.GetSecond();
SetTimer(0,100,NULL);
}
void CShaoYeView::OnConStop()
{
// TODO: Add your command handler code here
m_bStart=true;
m_bStop=false;
InvalidateRect( NULL, TRUE );
UpdateWindow();
m_sampleresult.Close();
m_AddFlux.Close();
KillTimer(0);
}
void CShaoYeView::OnUpdateConStart(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(m_bStart);
}
void CShaoYeView::OnUpdateConStop(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(m_bStop);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -