📄 curvehistorydlg.cpp
字号:
// CurveHistoryDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Operat.h"
#include "CurveHistoryDlg.h"
#include "DateInputDlg.h"
#include "HistoryData.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCurveHistoryDlg dialog
CCurveHistoryDlg::CCurveHistoryDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCurveHistoryDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CCurveHistoryDlg)
m_nAnavalHist1 = _T("");
m_nAnavalHist2 = _T("");
m_nAnavalHist3 = _T("");
m_nAnavalHist4 = _T("");
m_nDownHist1 = _T("");
m_nDownHist2 = _T("");
m_nDownHist3 = _T("");
m_nDownHist4 = _T("");
m_nNameHist1 = _T("");
m_nNameHist2 = _T("");
m_nNameHist3 = _T("");
m_nNameHist4 = _T("");
m_nUpperHist1 = _T("");
m_nUpperHist2 = _T("");
m_nUpperHist3 = _T("");
m_nUpperHist4 = _T("");
m_nStaticCurTime = _T("");
//}}AFX_DATA_INIT
}
void CCurveHistoryDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCurveHistoryDlg)
DDX_Control(pDX, IDC_EDITTIMELEN2, m_nEditTimeMinute);
DDX_Control(pDX, IDC_SPINTIMELEN2, m_nSpinTimeMinute);
DDX_Control(pDX, IDC_EDITTIMELEN, m_nEditTimeLen);
DDX_Control(pDX, IDC_SPINTIMELEN, m_nSpinTimeLen);
DDX_Control(pDX, IDC_SPINUpper4, m_nSpinUpper4);
DDX_Control(pDX, IDC_SPINUpper3, m_nSpinUpper3);
DDX_Control(pDX, IDC_SPINUpper2, m_nSpinUpper2);
DDX_Control(pDX, IDC_SPINUpper1, m_nSpinUpper1);
DDX_Control(pDX, IDC_SPINDown4, m_nSpinDown4);
DDX_Control(pDX, IDC_SPINDown3, m_nSpinDown3);
DDX_Control(pDX, IDC_SPINDown2, m_nSpinDown2);
DDX_Control(pDX, IDC_SPINDown1, m_nSpinDown1);
DDX_Control(pDX, IDC_LIST2, m_nList);
DDX_Text(pDX, IDC_EDIT_ANAVAL_HIST1, m_nAnavalHist1);
DDX_Text(pDX, IDC_EDIT_ANAVAL_HIST2, m_nAnavalHist2);
DDX_Text(pDX, IDC_EDIT_ANAVAL_HIST3, m_nAnavalHist3);
DDX_Text(pDX, IDC_EDIT_ANAVAL_HIST4, m_nAnavalHist4);
DDX_Text(pDX, IDC_EDIT_DOWN_HIST1, m_nDownHist1);
DDX_Text(pDX, IDC_EDIT_DOWN_HIST2, m_nDownHist2);
DDX_Text(pDX, IDC_EDIT_DOWN_HIST3, m_nDownHist3);
DDX_Text(pDX, IDC_EDIT_DOWN_HIST4, m_nDownHist4);
DDX_Text(pDX, IDC_EDIT_HIST_NAME1, m_nNameHist1);
DDX_Text(pDX, IDC_EDIT_HIST_NAME2, m_nNameHist2);
DDX_Text(pDX, IDC_EDIT_HIST_NAME3, m_nNameHist3);
DDX_Text(pDX, IDC_EDIT_HIST_NAME4, m_nNameHist4);
DDX_Text(pDX, IDC_EDIT_UPPER_HIST1, m_nUpperHist1);
DDX_Text(pDX, IDC_EDIT_UPPER_HIST2, m_nUpperHist2);
DDX_Text(pDX, IDC_EDIT_UPPER_HIST3, m_nUpperHist3);
DDX_Text(pDX, IDC_EDIT_UPPER_HIST4, m_nUpperHist4);
DDX_Text(pDX, IDC_STATIC_CURTIME, m_nStaticCurTime);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCurveHistoryDlg, CDialog)
//{{AFX_MSG_MAP(CCurveHistoryDlg)
ON_MESSAGE(HIST_SPLITLINEXCHANGE_MESSAGE,OnCurveFlowSplitXChange)
ON_MESSAGE(HIST_CURVE_FORWARDMOVE_MESSAGE,OnCurveFlowForwardMove)
ON_MESSAGE(HIST_CURVE_BACKMOVE_MESSAGE,OnCurveFlowBackMove)
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON_EXIT_HIST, OnButtonExitHist)
ON_BN_CLICKED(IDC_BUTTON_PRINT_HIST, OnButtonPrintHist)
ON_BN_CLICKED(IDC_BUTTON_APPLYHIST, OnButtonApplyhist)
ON_WM_PAINT()
ON_LBN_SELCHANGE(IDC_LIST2, OnSelchangeList2)
ON_BN_CLICKED(IDC_BUTTON_BEGINDATE, OnButtonBegindate)
ON_WM_DESTROY()
ON_NOTIFY(UDN_DELTAPOS, IDC_SPINDown1, OnDeltaposSPINDown1)
ON_NOTIFY(UDN_DELTAPOS, IDC_SPINDown2, OnDeltaposSPINDown2)
ON_NOTIFY(UDN_DELTAPOS, IDC_SPINDown3, OnDeltaposSPINDown3)
ON_NOTIFY(UDN_DELTAPOS, IDC_SPINDown4, OnDeltaposSPINDown4)
ON_NOTIFY(UDN_DELTAPOS, IDC_SPINUpper1, OnDeltaposSPINUpper1)
ON_NOTIFY(UDN_DELTAPOS, IDC_SPINUpper2, OnDeltaposSPINUpper2)
ON_NOTIFY(UDN_DELTAPOS, IDC_SPINUpper3, OnDeltaposSPINUpper3)
ON_NOTIFY(UDN_DELTAPOS, IDC_SPINUpper4, OnDeltaposSPINUpper4)
ON_NOTIFY(UDN_DELTAPOS, IDC_SPINTIMELEN, OnDeltaposSpintimelen)
ON_NOTIFY(UDN_DELTAPOS, IDC_SPINTIMELEN2, OnDeltaposSpintimelen2)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCurveHistoryDlg message handlers
BOOL CCurveHistoryDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
InitCurveFlow();
InitData();
InitCtrl();
ResetCtrl(0);
ResetCurveFlow(0);
// SetWindowPos(NULL,30,50,0,0,TRUE);
this->CenterWindow(NULL);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CCurveHistoryDlg::InitCurveFlow()
{
m_nCurveHistFlow.SetBkFrameColor(m_nCurveCommandSet.nBackColor,m_nCurveCommandSet.nFontBackColor);
m_nCurveHistFlow.SetPrimCompart(m_nCurveCommandSet.nPrimNumX,m_nCurveCommandSet.nPrimNumY,m_nCurveCommandSet.nPrimWidth,PS_SOLID,m_nCurveCommandSet.nPrimColor);
m_nCurveHistFlow.SetSecCompart(m_nCurveCommandSet.nSecondNumX,m_nCurveCommandSet.nSecondNumY,m_nCurveCommandSet.nSecondWidth,PS_SOLID,m_nCurveCommandSet.nSecondColor);
m_nCurveHistFlow.SetXId(m_nCurveCommandSet.nTimeCoordNum,m_nCurveCommandSet.nFontColor,m_nCurveCommandSet.nFontSize,m_nCurveCommandSet.nFontName);
m_nCurveHistFlow.SetTimePigment(3,1);
m_nCurveHistFlow.SetSplitLine(PS_SOLID,m_nCurveCommandSet.nIdLineWidth,m_nCurveCommandSet.nIdLineColor);
CRect nRect(0,0,660,390);
m_nCurveHistFlow.Create(NULL,NULL,WS_CHILD | WS_BORDER | WS_TABSTOP | WS_VISIBLE,nRect,this,IDC_HISTCURVE_FLOW,NULL);
m_nCurveHistFlow.InitCtrl(360,600,10,30,30,20);
CTime nTime=CTime::GetCurrentTime();
m_nCurveHistFlow.InvalidateCtrl(nTime.GetTime()-nTime.GetSecond());
m_nBeginTime=m_nCurveHistFlow.GetStartTime();
m_nEndTime =m_nCurveHistFlow.GetEndTime();
}
void CCurveHistoryDlg::InitData()
{
CCurveDrawStruct *pCurveDrawStruct;
for(int i=0;i<MAX_CURVE_GROUP;i++)
for(int j=0;j<MAX_CURVE_NUMPERGROUP;j++)
{
pCurveDrawStruct=m_pCurveDrawStruct+i*MAX_CURVE_NUMPERGROUP+j;
if ((pCurveDrawStruct->nNo>=0)&&(pCurveDrawStruct->nNo<MAX_HIST_POINT))
{
m_nCurDown[i][j]=pCurveDrawStruct->nDown;
m_nCurUpper[i][j]=pCurveDrawStruct->nUpper;
}
}
for(i=0;i<MAX_CURVE_NUMPERGROUP;i++)
{
try
{
m_pCurveAnaval[i]=new float[610];
}
catch (CMemoryException *e)
{
e->Delete();
if (m_pCurveAnaval[i]!=NULL) delete [] m_pCurveAnaval[i];
AfxMessageBox("no enough memory");
CDialog::OnCancel();
break;
}
try
{
m_pCurveTime[i] =new time_t[610];
}
catch(CMemoryException *e)
{
e->Delete();
if (m_pCurveTime[i]!=NULL) delete[] m_pCurveTime[i];
AfxMessageBox("no enough memory");
CDialog::OnCancel();
break;
}
}
}
void CCurveHistoryDlg::ResetCurveFlow(short nGroupNo)
{
if ((nGroupNo<0)||(nGroupNo>=MAX_CURVE_GROUP)) return;
short nOldGroupNo=nGroupNo;
if (m_nCurSystem==1) nGroupNo+=MAX_TURBINE_CURVE;
CCurveDrawStruct *pCurveDrawStruct;
short nTempCount=0;
BOOL bFirstGet=TRUE;
CHistoryData pHistoryData;
CTime nTime;
nTime=m_nEndTime;
m_nCurveHistFlow.DeleteAllLine();
m_nCurveHistFlow.InvalidateCtrl(nTime.GetTime());
short nIndex=0;
short nSum=601;
short nTimeInterval=m_nCurveHistFlow.GetIntervalTime();
for(int i=0;i<MAX_CURVE_NUMPERGROUP;i++)
{
*(m_pCurveTime[i]+0)=nTime.GetTime();
for(int j=1;j<nSum;j++)
{
*(m_pCurveTime[i]+j)=*(m_pCurveTime[i]+j-1)-nTimeInterval;
}
}
for (i=0;i<MAX_CURVE_NUMPERGROUP;i++)
{
pCurveDrawStruct=m_pCurveDrawStruct+(nGroupNo)*MAX_CURVE_NUMPERGROUP+i;
if (pCurveDrawStruct->nNo<0) continue;
m_nCurveHistFlow.AddLine(pCurveDrawStruct->nColor,PS_SOLID,pCurveDrawStruct->nWidth,pCurveDrawStruct->nDown,pCurveDrawStruct->nUpper);
// memset((float*)m_pCurveAnaval[i],0,sizeof(float));
m_nCurHistCount[i]=0;
m_nCurHistCount[i]=pHistoryData.GetHistDataArray(pCurveDrawStruct->nNo,nTimeInterval,nSum,m_pCurveAnaval[i],m_pCurveTime[i]);
if (m_nCurHistCount[i]>0)
{
m_nCurveHistFlow.SetHistoryPos(nIndex,m_pCurveAnaval[i],m_pCurveTime[i],m_nCurHistCount[i]);
m_nCurveHistFlow.DrawHistoryData();
}
nIndex++;
}
//m_nCurveDynamicFlow.InvalidateCtrl(FALSE);
nGroupNo=nOldGroupNo;
m_nCurGroupNo=nGroupNo;
}
LRESULT CCurveHistoryDlg::OnCurveFlowSplitXChange(WPARAM wParam,LPARAM lParam)
{
CCurveDrawStruct *pCurveDrawStruct;
time_t nCurTime;
nCurTime=m_nCurveHistFlow.GetCurSplitTime();
short nIntervalTime=m_nCurveHistFlow.GetIntervalTime();
short nIndex[MAX_CURVE_NUMPERGROUP];
CHistoryData nHistoryData;
for(int i=0;i<MAX_CURVE_NUMPERGROUP;i++)
{
nIndex[i]=700;
pCurveDrawStruct=m_pCurveDrawStruct+m_nCurGroupNo*MAX_CURVE_NUMPERGROUP+i;
if ((pCurveDrawStruct->nNo<0)||(pCurveDrawStruct->nNo>=MAX_HIST_POINT)) continue;
for(int j=0;j<m_nCurHistCount[i];j++)
{
if (nHistoryData.InTimeRange(nCurTime,*(m_pCurveTime[i]+j),nIntervalTime))
{
nIndex[i]=j;
break;
}
}
}
for( i=0;i<MAX_CURVE_NUMPERGROUP;i++)
{
pCurveDrawStruct=m_pCurveDrawStruct+m_nCurGroupNo*MAX_CURVE_NUMPERGROUP+i;
if ((pCurveDrawStruct->nNo<0)||(pCurveDrawStruct->nNo>=MAX_HIST_POINT)) continue;
if (nIndex[i]<601)
{
float nTemp=*(m_pCurveAnaval[i]+nIndex[i]);
if (fabs(nTemp)>100) m_nCurAnavalArray[i]->Format("%7.0f",nTemp);
else if (fabs(nTemp)<1) m_nCurAnavalArray[i]->Format("%7.3f",nTemp);
else m_nCurAnavalArray[i]->Format("%7.2f",nTemp);
}
else
{
m_nCurAnavalArray[i]->Empty();
}
}
CTime nTime;
nTime=nCurTime;
CString nStr;
if (nTime.GetYear()>=2000)
{
nStr.Format("0%-d/%2d/%2d:%2d:%2d:%2d",nTime.GetYear()%2000,nTime.GetMonth(),nTime.GetDay(),nTime.GetHour(),nTime.GetMinute(),nTime.GetSecond());
}
else
{
nStr.Format("%-d/%2d/%2d:%2d:%2d:%2d",nTime.GetYear(),nTime.GetMonth(),nTime.GetDay(),nTime.GetHour(),nTime.GetMinute(),nTime.GetSecond());
}
m_nStaticCurTime=nStr;
nStr.Empty();
UpdateData(FALSE);
return 0;
}
LRESULT CCurveHistoryDlg::OnCurveFlowForwardMove(WPARAM wParam,LPARAM lParam)
{
CHistoryData pHistoryData;
CCurveDrawStruct *pCurveDrawStruct;
float nAnavalArray[MAX_CURVE_NUMPERGROUP][32],nDayPileArray[32],nMonthPileArray[32];
long nTimeArray[32];
float nCurAnaval;
short nCount,nSum;
nCount=(short)wParam;
if ((nCount<=0)||(nCount>32)) return 0;
// nCount=1;
if (lParam==HIST_MOVE_CURVE)
{
m_nEndTime=m_nCurveHistFlow.GetEndTime();
m_nBeginTime=m_nCurveHistFlow.GetStartTime();
ReDraw();
}
else
{
/*
time_t nTime;
short nTimeInterval=m_nCurveHistFlow.GetIntervalTime()/60;
nTime=m_nCurveHistFlow.GetEndTime();
nTime+=nTimeInterval*nCount;
short nGroupNo;
nGroupNo=m_nList.GetCurSel();
if ((nGroupNo<0)||(nGroupNo>MAX_CURVE_NUMPERGROUP))return 0;
for (int i=0;i<MAX_CURVE_NUMPERGROUP;i++)
{
pCurveDrawStruct=m_pCurveDrawStruct+nGroupNo*MAX_CURVE_NUMPERGROUP+i;
if (pCurveDrawStruct->nNo<0) continue;
pHistoryData.GetHistDataArray(pCurveDrawStruct->nNo,nTimeInterval,nCount,nAnavalArray[i],nTimeArray);
}
long nEndTime;
nEndTime=m_nCurveHistFlow.GetEndTime();
for(i=0;i<nCount;i++)
{
short nIndex=0,nCurPos=0,nState;
for(int j=0;j<MAX_CURVE_NUMPERGROUP;j++)
{
pCurveDrawStruct=m_pCurveDrawStruct+(nGroupNo)*MAX_CURVE_NUMPERGROUP+j;
if (pCurveDrawStruct->nNo<0) continue;
if (nTimeArray[nCurPos]==nEndTime)
{
nState=NORMAL_POINT;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -