⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 curvehistorydlg.cpp

📁 远程视频监控系统最新程序代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// 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 + -