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

📄 curvehistflow.cpp

📁 远程视频监控系统最新程序代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	{
		delete m_nItems.GetAt(i);
	}
	m_nItems.RemoveAll();
}


void CCurveHistFlow::SetPos(short nIndex, float nPos, short nState, long nTime) 
{
	// TODO: Add your dispatch handler code here
    if (nIndex>=m_nItems.GetSize()) return;
	CHistChartItem *pItem;
	pItem=m_nItems.GetAt(nIndex);
	if (nPos>pItem->m_nUpper) nPos=pItem->m_nUpper;
	if (nPos<pItem->m_nLower) nPos=pItem->m_nLower;
//	pItem->m_nOldPos=pItem->m_nPos;
	pItem->m_nPos=nPos;
	//if (nTime<pItem->m_nPosTime) nTime=pItem->m_nPosTime;
	//if (nTime>m_nEndTime+m_nTimer) nTime=m_nEndTime+m_nTimer;
	//pItem->m_nOldPosTime=pItem->m_nPosTime;
	pItem->m_nPosTime=nTime;
	pItem->m_nPointState=nState;
}


void CCurveHistFlow::SetNLineX(short nNewValue) 
{
	// TODO: Add your property handler here
	short nMovePixels;
    m_nLineX=nNewValue;    
	long nTempTime;
	CTime nTime;
	nTime=CTime::GetCurrentTime();
	if (m_nLineX<0)
	{   
      if (m_nLineX==-m_nWidth)
	  {
          nTempTime=m_nEndTime-m_nStartTime;
		  m_nEndTime=m_nStartTime;          
          m_nStartTime-=nTempTime;	
		  m_nLineX=0;	
	 	  m_pParentWnd->SendMessage(HIST_CURVE_BACKMOVE_MESSAGE,1,HIST_MOVE_CURVE);
	  }
	  else
	  {
	      nMovePixels=abs(m_nLineX-0);
		  m_nLineX=0;
		  m_pParentWnd->SendMessage(HIST_CURVE_BACKMOVE_MESSAGE,nMovePixels/m_nPigment,HIST_MOVE_POINT);
	  }
	}
	else if (m_nLineX>m_nWidth)
	{
		if (m_nLineX==2*m_nWidth)
		{
		  nTempTime=m_nEndTime-m_nStartTime;
		  if ((m_nEndTime+nTempTime)>nTime.GetTime()) return;
		  m_nStartTime=m_nEndTime;
		  m_nEndTime+=nTempTime;
		  m_nLineX=m_nWidth;
		  m_pParentWnd->SendMessage(HIST_CURVE_FORWARDMOVE_MESSAGE,1,HIST_MOVE_CURVE);
		}
		else
		{
          nMovePixels=abs(m_nLineX-m_nWidth);
		  m_nLineX=m_nWidth;
		  m_pParentWnd->SendMessage(HIST_CURVE_FORWARDMOVE_MESSAGE,nMovePixels/m_nPigment,HIST_MOVE_POINT);
		}
	}
	else
	{
		m_pParentWnd->SendMessage(HIST_SPLITLINEXCHANGE_MESSAGE,0,0);
	}
	Invalidate(FALSE);
}



void CCurveHistFlow::PreparePrint(short nIndex, short nCount, long* pTime, float* pPos, char* pName) 
{
	// TODO: Add your dispatch handler code here
    if (nIndex>=m_nItems.GetSize()) return;
	CHistChartItem *pItem;
	pItem=m_nItems.GetAt(nIndex);
	pItem->m_pCurvePos=pPos;
	pItem->m_pTime=pTime;
	pItem->m_nHistCount=nCount;
	pItem->m_pName=pName;
}


void CCurveHistFlow::Printer(long nStartTime, long nEndTime, long nCurTime, float * pCurPos) 
{
	// TODO: Add your dispatch handler code here
      CDC  dc;
	  CPrintInfo Info;
	  DOCINFO    di;
	  TEXTMETRIC nTm;
	  CPrintDialog PrintDlg(FALSE);
	  if (PrintDlg.DoModal()==IDCANCEL) return;
      dc.Attach(PrintDlg.GetPrinterDC());
	  dc.m_bPrinting=TRUE;
      //dc.SetMapMode(MM_TWIPS);
	   dc.SetMapMode(MM_LOMETRIC);
	  Info.SetMinPage(1);
	  Info.SetMaxPage(1);
	  di.cbSize=sizeof(DOCINFO);
	  di.lpszDocName="";
	  di.lpszOutput=NULL;
	  di.fwType=0;
	  short nTextHeight;
	  if (dc.GetTextMetrics(&nTm)!=0) nTextHeight=nTm.tmHeight+50;
	  short nPageHeight=dc.GetDeviceCaps(VERTRES);
	  short nPageWidth=dc.GetDeviceCaps(HORZRES);
	  short nCount=m_nItems.GetSize();
	  short nScale=((nPageHeight-(nCount+4)*nTextHeight)/m_nHeight<(nPageWidth-200)/m_nWidth)?(nPageHeight/m_nHeight):(nPageWidth/m_nWidth);
      BOOL bPrintingOk=dc.StartDoc(&di);
	  dc.SetViewportOrg(0,0);
	  dc.StartPage();

      //******draw title*******
       CString nStr;
	   CFont nFont;
	   CTime nTime;
	   nTime=nCurTime;
	   nStr.Format("%s","------历 史 曲 线 图------");
	   CSize nSize=dc.GetTextExtent(nStr);
	   dc.TextOut((nPageWidth-nSize.cx)/2,nSize.cy,nStr);
       nStr.Format("%4d/%2d/%2d",nTime.GetYear(),nTime.GetMonth(),nTime.GetDay());
	   nSize=dc.GetTextExtent(nStr);
	   dc.TextOut((nPageWidth-nSize.cx)/2,nSize.cy+nTextHeight,nStr);

	  //******end draw title **********

	  // ****draw grid*********
	  CPen nPen1(m_PrimPenStyle,m_PrimPenWidth,m_PrimPenColor);
      CPen nPen2(m_PrimPenStyle,m_SecPenWidth,m_SecPenColor);
	  CPen *prePen;
	  CRect nRect;
	  nRect.SetRect(50,10+nTextHeight*2,m_nWidth*nScale+50,m_nHeight*nScale+nTextHeight*2+10);      
	  float x=nRect.right-nRect.left;
	  float y=nRect.bottom-nRect.top;
      float nRange=x/(m_xPrimLineSum+1);
	  int i,j;
      for( i=0;i<=m_xPrimLineSum+1;i++)
	  {   
		  prePen=dc.SelectObject(&nPen1);
		  dc.MoveTo((int)(i*nRange)+nRect.left,nRect.top);
		  dc.LineTo((int)(i*nRange)+nRect.left,nRect.bottom);
		  dc.SelectObject(prePen);
		  if (i<m_xPrimLineSum+1) for(j=1;j<m_xSecLineSum+1;j++)
		  { 
             prePen=dc.SelectObject(&nPen2);
		     dc.MoveTo((int)(i*nRange+j*nRange/(m_xSecLineSum+1))+nRect.left,nRect.top);
		     dc.LineTo((int)(i*nRange+j*nRange/(m_xSecLineSum+1))+nRect.left,nRect.bottom);
		     dc.SelectObject(prePen);
		  }
	  }
	  nRange=y/(m_yPrimLineSum+1);
	  for(i=0;i<=m_yPrimLineSum+1;i++)
	  {   
		  prePen=dc.SelectObject(&nPen1);
		  dc.MoveTo(nRect.left,(int)(i*nRange)+nRect.top);
		  dc.LineTo(nRect.right,(int)(i*nRange)+nRect.top);
		  dc.SelectObject(prePen);
		  if (i<m_yPrimLineSum+1) for(j=1;j<m_ySecLineSum+1;j++)
		  { 
             prePen=dc.SelectObject(&nPen2);
		     dc.MoveTo(nRect.left,(int)(i*nRange+j*nRange/(m_ySecLineSum+1))+nRect.top);
		     dc.LineTo(nRect.right,(int)(i*nRange+j*nRange/(m_ySecLineSum+1)+nRect.top));
		     dc.SelectObject(prePen);
		  }
	  }
     CPen nSplitPen(m_nSplitPenStyle,m_nSplitPenWidth,m_nSplitPenColor);
    // CPen nSplitPen(m_nSplitPenStyle,3,RGB(0,0,0));
	 prePen=dc.SelectObject(&nSplitPen);
	 dc.MoveTo(nRect.left+(nCurTime-nStartTime)*m_nPigment*nScale/m_nTimer,nRect.top);
	 dc.LineTo(nRect.left+(nCurTime-nStartTime)*m_nPigment*nScale/m_nTimer,nRect.bottom);
	 dc.SelectObject(prePen);

	 //*****end draw curve Grid*********
     CHistChartItem *pItem;
	 for (i=0;i<nCount;i++)
	 {
        pItem=m_nItems.GetAt(i);
		short nOldPos=0;
		short nOldTime=0;
		nRange=pItem->m_nUpper-pItem->m_nLower;
		CPen nPen(pItem->m_nPenStyle,pItem->m_nPenWidth,pItem->m_nPenColor);
		CPen *prePen=dc.SelectObject(&nPen);
		for(j=0;j<pItem->m_nHistCount;j++)
		{
			float nPos=*(pItem->m_pCurvePos+j);
			long  nTime=*(pItem->m_pTime+j);
			if (nPos>pItem->m_nUpper) nPos=pItem->m_nUpper;
			if (nPos<pItem->m_nLower) nPos=pItem->m_nLower;
            short x=(int)((float)(nTime-m_nStartTime)/m_nTimer*m_nPigment*nScale);
            short y=(int)(nRect.Height()-(nPos-pItem->m_nLower)*nRect.Height()/nRange);
            if ((j!=0)&&((x-nOldTime)<=3*m_nPigment*nScale))   // if first point or space between two point greater 3 point
			{	
			  if (fabs(x-nOldTime)<m_nPigment*4*nScale)
			  {
                dc.MoveTo(nOldTime+nRect.left,nOldPos+nRect.top);
			    dc.LineTo(x+nRect.left,y+nRect.top);
			  }
			}
			nOldPos=y;
			nOldTime=x;   			 
		}
		dc.SelectObject(prePen);
	 }
    
	  if (m_xIdentifySum!=0) // if have time coordinate identify 
	 {
		  CString str;	
		  CTime nTime;
		  nTime=nEndTime;
		  str.Format("%2d_%2d:%2d:%2d",nTime.GetMonth(),nTime.GetDay(),nTime.GetHour(),nTime.GetMinute());
	 	  //CFont nFont;
		  //nFont.CreatePointFont(m_nTimeCoordFontSize,m_nTimeCoordFontName,NULL);
		  //CFont *preFont=dc.SelectObject(&nFont);
		  CSize nSize=dc.GetTextExtent(str);
		  COLORREF preTextColor=dc.SetTextColor(m_xIdentifyColor);
		  short nIdentifySpace=(nRect.right-nRect.left)/m_xIdentifySum;
          long nPerTime=(nEndTime-nStartTime)/m_xIdentifySum; 
		  for (i=m_xIdentifySum;i>=0;i--)
		  {
		     dc.TextOut(i*nIdentifySpace-nSize.cx/2+nRect.left,nRect.bottom+nSize.cy/2,str);           
			 nTime=(time_t)(nEndTime-(m_xIdentifySum-i+1)*nPerTime);
		     str.Format("%2d_%2d:%2d:%2d",nTime.GetMonth(),nTime.GetDay(),nTime.GetHour(),nTime.GetMinute());
		  }
          //dc.SelectObject(preFont);			
		  dc.SetTextColor(preTextColor);
		//  nFont.DeleteObject();
	 }
     
      for (i=0;i<nCount;i++)
	  {
		  pItem=m_nItems.GetAt(i);
		  CPen nPen(pItem->m_nPenStyle,pItem->m_nPenWidth,pItem->m_nPenColor);
		  //CPen nPen(pItem->m_nPenStyle,3,pItem->m_nPenColor);
		  CPen *prePen=dc.SelectObject(&nPen);
		  dc.MoveTo(100,nRect.bottom+(i+1)*nTextHeight+20);
          dc.LineTo(100+10*nScale,nRect.bottom+(i+1)*nTextHeight+20);
		  dc.SelectObject(prePen);
          CString nStr;
		  CTime nTime=nCurTime;
		  if (fabs(pItem->m_nUpper)>100.0)
		  {
		      nStr.Format("%-40s上下限:%5.0f--%-4.0f时间:%-2d_%-2d:%-2d:%-2d:%-2d 值:%5.0f",pItem->m_pName,pItem->m_nUpper,pItem->m_nLower,nTime.GetMonth(),nTime.GetDay(),nTime.GetHour(),nTime.GetMinute(),nTime.GetSecond(),*(pCurPos+i));
		  }
		  else if (fabs(pItem->m_nUpper)>10.0)
		  {
			  nStr.Format("%-40s上下限:%5.1f--%-4.1f时间:%-2d_%-2d:%-2d:%-2d:%-2d 值:%5.1f",pItem->m_pName,pItem->m_nUpper,pItem->m_nLower,nTime.GetMonth(),nTime.GetDay(),nTime.GetHour(),nTime.GetMinute(),nTime.GetSecond(),*(pCurPos+i));
		  }
          else if (fabs(pItem->m_nUpper)>0.001)
		  {
              nStr.Format("%-40s上下限:%5.3f--%-5.3f时间:%-2d_%-2d:%-2d:%-2d:%-2d 值:%5.3f",pItem->m_pName,pItem->m_nUpper,pItem->m_nLower,nTime.GetMonth(),nTime.GetDay(),nTime.GetHour(),nTime.GetMinute(),nTime.GetSecond(),*(pCurPos+i));
		  }
          else 
		  {
              nStr.Format("%-40s上下限:%6.4f--%-5.4f时间:%-2d_%-2d:%-2d:%-2d:%-2d 值:%6.4f",pItem->m_pName,pItem->m_nUpper,pItem->m_nLower,nTime.GetMonth(),nTime.GetDay(),nTime.GetHour(),nTime.GetMinute(),nTime.GetSecond(),*(pCurPos+i));
		  }
		  dc.TextOut(50+10*nScale,nRect.bottom+(i+1)*nTextHeight,nStr);
		  nStr.Empty();
	  }

	nRect.SetRect(50,10+nTextHeight*2,m_nWidth*nScale+50,m_nHeight*nScale+nTextHeight*2+10); 
    nCount=m_yPrimLineSum+1;
	for(i=0;i<2;i++)
	{
	   if (i>=m_nItems.GetSize()) break;
	   pItem=m_nItems.GetAt(i);
	   float nSpace=(pItem->m_nUpper-pItem->m_nLower)/nCount;
	   float nHeightSpace=nRect.Height()/nCount;
       float nTemp;
	   for(int j=0;j<=nCount;j++)
	   {
         nTemp=pItem->m_nLower+j*nSpace;
		 if (nSpace>1.0)
		 {
			 nStr.Format("%6.0f",nTemp);
		 }
		 else  if (nSpace>0.1)
		 {		   
			 nStr.Format("%6.1f",nTemp);
		 }
	     else
		 {		   
			 nStr.Format("%6.2f",nTemp);
		 }
		 nStr.TrimLeft();
		 nSize=dc.GetTextExtent(nStr);
		 if (i==0)
		 {
			  if (j==0 ) dc.TextOut(nRect.left-nSize.cx-2,nRect.bottom-nHeightSpace*j-nSize.cy,nStr);
			  else dc.TextOut(nRect.left-nSize.cx-2,nRect.bottom-nHeightSpace*j-nSize.cy/2,nStr);
		 }
		 else
		 {
			 if (j==0 ) dc.TextOut(nRect.right+2,nRect.bottom-nHeightSpace*j-nSize.cy,nStr);
			 else  dc.TextOut(nRect.right+2,nRect.bottom-nHeightSpace*j-nSize.cy/2,nStr);				  
		 }
		 nStr.Empty();
	   }
	}

	  bPrintingOk=(dc.EndPage()>0);
	  if (bPrintingOk)
		  dc.EndDoc();
	  else
		  dc.AbortDoc();
	 dc.SetMapMode(MM_TEXT);
	  dc.Detach();
}

void CCurveHistFlow::EndPrint() 
{
	// TODO: Add your dispatch handler code here

	 int nCount=m_nItems.GetSize();
     CHistChartItem *pItem;
	 for (int i=0;i<nCount;i++)
	 {
        pItem=m_nItems.GetAt(i);
		pItem->m_nHistCount=0;
	 }

}


void CCurveHistFlow::SetHistoryPos(short nIndex, float *pAnavalArray, long *pTimeArray, short nCount)
{
   if (nIndex>=m_nItems.GetSize()) return;
	CHistChartItem *pItem;
	pItem=m_nItems.GetAt(nIndex);
	pItem->m_pCurvePos=pAnavalArray;
	pItem->m_pTime=pTimeArray;
	pItem->m_nHistCount=nCount;
}

void CCurveHistFlow::DrawHistoryData()
{
    if (m_MemDC.GetSafeHdc()!=NULL)
	{
      int nCount=m_nItems.GetSize();
	  CHistChartItem* pItem;
	  CPoint nOldPoint,nNewPoint;
	  float nRange;
	  CRect nRect;
	  nRect.SetRect(0,0,m_nWidth,m_nHeight+m_nFrameTopH);
	  BOOL bBeginPointNormal=TRUE,bEndPointNormal=TRUE;
	  for (int i=nCount-1;i<nCount;i++)
	  {
		 pItem=m_nItems.GetAt(i);  
		  
		 nRange=pItem->m_nUpper-pItem->m_nLower;		 
		 for (int j=1;j<pItem->m_nHistCount;j++)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -