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

📄 gtmpegwnd.cpp

📁 一个完整的数字硬盘录像机系统软件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		  else
		  {
			 m_bCompressCard=FALSE;
			 for(int i=0;i<theApp.m_nChannels;i++)
				 g_pDevice[i]->StopCheck();
			 if(m_pLogoObject==NULL)
				m_pLogoObject=new CImageObject(m_sLogoPath);
			 InvalidateRect(rect);
		  }
		}
	}
	CDialog::OnLButtonDblClk(nFlags, point);
}
///////////////////////////////
//
///////////////////////////////
void  CGtMpegWnd::DblkVideoPos(CWnd *CtlWnd)
{
   if(CtlWnd!=NULL)
   {
      UINT ID=CtlWnd->GetDlgCtrlID();
	  int nChannel=ID-IDC_VIDEO_POS;
	  if(nChannel>=theApp.m_nChannels)
		  return;
	  for(DWORD i=0;i<g_dwNumberOfSlots;i++)
	  {
	     m_nChannel[i]=0;
         ((CButton *)GetDlgItem(IDC_CHANNEL0+i))->SetCheck(m_nChannel[i]);
	  }
	  m_nChannel[nChannel]=1;
      ((CButton *)GetDlgItem(IDC_CHANNEL0+nChannel))->SetCheck(m_nChannel[nChannel]);
	  if(nChannel<8)
	  {
	       if(g_pDevice[nChannel]->m_bRePlay)
			  return;
		   if(m_nPicNumX!=1&&m_nPicNumY!=1)
		   {
			   m_nPicNumX=1;
			   m_nPicNumY=1;
			   StopDisplayAll();
			   AdjustMpegWindow(nChannel);
			   g_pDevice[nChannel]->StartDisplay();
		   }
		   else
		   {
	           if(g_dwNumberOfSlots<=8&&g_dwNumberOfSlots>4)
			   {
		          m_nPicNumX=3;
	              m_nPicNumY=3;
			   }
	           if(g_dwNumberOfSlots<=4&&g_dwNumberOfSlots>1)
			   {
		          m_nPicNumX=2;
	              m_nPicNumY=2;
			   }
	           if(g_dwNumberOfSlots<2)
			   {
		          m_nPicNumX=1;
	              m_nPicNumY=1;
			   }
			   StopDisplayAll();
			   AdjustMpegWindow();
			   for(int i=0;i<m_nPicNumX*m_nPicNumY;i++)
			   {
			      if(i<theApp.m_nChannels)
				  {
					  if(g_pDevice[i]->m_bRePlay)
						g_pDevice[i]->PlaybackAdjust();
					  else
						g_pDevice[i]->StartDisplay();
				  }
			   }
		   }
	  }
   }
}
///////////////////////////////
//
///////////////////////////////
BOOL CGtMpegWnd::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) 
{
	NMHDR *Msg=(NMHDR *)lParam;
	BYTE byCommand;
	if(wParam==_CTRL_INFO)
	{
	    switch(Msg->code)
		{
		   case _CTRL_UP_START:
			                  byCommand=(BYTE)AfxGetApp()->GetProfileInt("控制","抬头",0x45);
			                  break;
		   case _CTRL_DOWN_START:
	    	                  byCommand=(BYTE)AfxGetApp()->GetProfileInt("控制","低头",0x44);
			                  break;
		   case _CTRL_LEFT_START:
							  byCommand=(BYTE)AfxGetApp()->GetProfileInt("控制","左转",0x43);
			                  break;
		   case _CTRL_RIGHT_START:
			                  byCommand=(BYTE)AfxGetApp()->GetProfileInt("控制","右转",0x42);
			                  break;
		   case _CTRL_TRUN_START:
			                  byCommand=(BYTE)AfxGetApp()->GetProfileInt("控制","自动",0x40);
			                  break;
		   case _CTRL_UP_STOP:
		   case _CTRL_DOWN_STOP:
		   case _CTRL_RIGHT_STOP:
		   case _CTRL_LEFT_STOP:
		   case _CTRL_TRUN_STOP:
		   case _PLATE_UP_STOP:
		   case _PLATE_DOWN_STOP:
		   case _PLATE_LEFT_STOP:
		   case _PLATE_RIGHT_STOP:
		   case _PLATE_LEFT_DOWN_STOP:
		   case _PLATE_RIGHT_DOWN_STOP:
							  byCommand=(BYTE)AfxGetApp()->GetProfileInt("控制","停止",0x41); 
			                  break;
		   case _PLATE_STOP:
                             byCommand=(BYTE)AfxGetApp()->GetProfileInt("控制","K1断开",0x68); 
							 break;
		   case _PLATE_UP_START:
							  byCommand=(BYTE)AfxGetApp()->GetProfileInt("控制","光圈增大",0x49);
			                  break;
		   case _PLATE_DOWN_START:
							  byCommand=(BYTE)AfxGetApp()->GetProfileInt("控制","光圈减少",0x4a);
			                  break;
		   case _PLATE_LEFT_START:
							  byCommand=(BYTE)AfxGetApp()->GetProfileInt("控制","短焦变倍",0x4b);
			                  break;
		   case _PLATE_LEFT_DOWN_START:
							  byCommand=(BYTE)AfxGetApp()->GetProfileInt("控制","长焦变倍",0x4c);
			                  break;
		   case _PLATE_RIGHT_START:
  			                  byCommand=(BYTE)AfxGetApp()->GetProfileInt("控制","聚焦前移",0x4d);
			                  break;
		   case _PLATE_RIGHT_DOWN_START:
							  byCommand=(BYTE)AfxGetApp()->GetProfileInt("控制","聚焦后移",0x4e);
			                  break;
		   case _PLATE_START:
							  byCommand=(BYTE)AfxGetApp()->GetProfileInt("控制","K1接通",0x67);
			                  break;
		}
		SendCommand(byCommand);
		return TRUE;
	}
	int nID=(int)wParam;
	if(nID==IDC_COMM_EVENT)
	{
	   switch(Msg->code)
	   {
          case COM_RXCHAR_DECTED:
                             OnComRxcharDected();
			                 break;
	   }
	   return TRUE;
	}
	if(wParam==_ALARM_ZONE_INFO)
	{
        NMHDR *Msg=(NMHDR *)lParam;
	    int nChunnel=HIWORD(Msg->code);
		int nStates=LOWORD(Msg->code);
		int nZone=Msg->idFrom-IDC_ZONE_STATES_1;
	    BYTE byCommand[5];
		int  nTmp=GetZonesStates(nChunnel);
		BYTE byTmp=1;
		byCommand[0]=(BYTE)0xcc;
        byCommand[1]=(BYTE)nChunnel;
        byCommand[2]=LOBYTE(nTmp);
        byCommand[3]=HIBYTE(nTmp);
		if(nZone>=0&&nZone<=7)
		{
		   byTmp<<=nZone;
		   if(nStates==0)
		   {
		      byTmp=~byTmp;
              byCommand[2]&=byTmp;
		   }
		   else
		   {
              byCommand[2]|=byTmp;
		   }
		}
		else
		{
		   byTmp<<=(nZone-8);
		   if(nStates==0)
		   {
		      byTmp=~byTmp;
              byCommand[3]&=byTmp;
		   }
		   else
		   {
              byCommand[3]|=byTmp;
		   }
		}
        byCommand[4]=(BYTE)0x10;
		WriteCommCommand(byCommand,5);
		//没道理
		//WriteCommCommand(byCommand,5);
		//
		SetZonesStates(nChunnel,nZone,nStates);
		CZone *pZone=GetChunnel(nChunnel)->GetZone(nZone);
		if(pZone!=NULL)
		{
			if(pZone->m_nType!=7&&pZone->m_nType!=3)
			{
				if(nStates==0)
					WriteAlarmInfo(nChunnel,nZone,6,COleDateTime::GetCurrentTime());
				else
					WriteAlarmInfo(nChunnel,nZone,5,COleDateTime::GetCurrentTime());
			}
		}
		return TRUE;
	}
	if(wParam==_ALARM_SECONDARY_INFO)
	{
	    int nChunnel=HIWORD(Msg->code);
		int nStates=LOWORD(Msg->code);
		int nSecondary=Msg->idFrom-IDC_SECONDARY_STATES_1;
		int nTmp=GetSecondarysStates(nChunnel);
		BYTE byTmp=1;
	    BYTE byCommand[3];
        byCommand[0]=(BYTE)0xdd;
        byCommand[1]=(BYTE)nChunnel;
        byCommand[2]=(BYTE)nTmp;
		byTmp<<=nSecondary;
		BOOL bAlarm=FALSE;
		if(nStates==0)
		{
		   byTmp=~byTmp;
           byCommand[2]&=byTmp;
		   CChunnel *pChunnel=GetChunnel(nChunnel);
           CSecondary *pSecondary;
           CSecondary *pTmpSecondary;
		   for(int i=0;i<16;i++)
		   {
				CZone *pZone=pChunnel->GetZone(i);
				if(pZone->GetBindSecondary()==nSecondary)
				   pZone->m_bTouchOff=FALSE;
		   }
		   POSITION nPos=m_lstAlarmSecondary.GetHeadPosition();
		   while(nPos)
		   {
		     POSITION nOldPos=nPos;
		     pSecondary=pChunnel->GetSecondary(nSecondary);
			 pTmpSecondary=m_lstAlarmSecondary.GetNext(nPos);
			 if(pTmpSecondary==pSecondary)
			 {
			    m_lstAlarmSecondary.RemoveAt(nOldPos);
				break;
			 }
		   }
		   bAlarm=FALSE;
		}
		else
		{
		  byCommand[2]|=byTmp; 
		  bAlarm=TRUE;
		}
        WriteCommCommand(byCommand);
		//没道理
		//WriteCommCommand(byCommand);
		//
		SetSecondarysStates(nChunnel,nSecondary,nStates);
		if(bAlarm)
          PlayAlarmSound();   
		else
           StopPlayAlarmSound();
	    return TRUE;
	}
	if(wParam==_CTRL_TIMER)
	{
	   switch(Msg->code)
	   {
	     case _CHECK_DISK_SPACE:
			                   if(m_nRecords>0)
							   {
								   if(g_arDriveList.GetSize()>0)
								   {
			                          for(int i=0;i<g_arDriveList.GetSize();i++)
									  {
	                                     DWORD dwFreeSpace=GetDiskFreeSpace(g_arDriveList.GetAt(i));
				                         if(dwFreeSpace<=m_dwMinDiskSpace)
										 {
				                             ForceStopRecord(g_arDriveList.GetAt(i));
										 }
									  }
								   }
		      
							   }
							   break;
	   }
	}
	return CDialog::OnNotify(wParam, lParam, pResult);
}
//////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////
void CGtMpegWnd::OnComRxcharDected()
{
   DWORD dwLength=0;
   BYTE *byRead=ReadCommBlock(dwLength);
   if(byRead[0]>=(BYTE)0x70&&byRead[0]<=(BYTE)0x77)
	   SetAlarm(byRead); 
   else
   {
      if(byRead[0]==(BYTE)0xb7)
	  {
	      int nChunnel=(int)(byRead[1]&0x0F);
		  if(m_nAlarmOffLine[nChunnel]>5)
		  {
		     CString sTxt;
		     sTxt.Format("地址码为%d的报警解码器断线,请维护!!!",byRead[1]);
		     m_cMsgListBox.AddString(sTxt+"\t");
			 m_nAlarmOffLine[nChunnel]=0;
		  }
		  else
             m_nAlarmOffLine[nChunnel]++;
	  }
	  else if(byRead[0]==(BYTE)0xb8)
	  {
	      CString sTxt;
		  sTxt.Format("地址码为%d的云镜解码器断线,请维护!!!",byRead[1]);
		  m_cMsgListBox.AddString(sTxt+"\t");
	  }
	  else if(byRead[0]==(BYTE)0xb9)
	  {
	     m_cMsgListBox.AddString("485控制卡命令缓冲溢出!!!\t");
	  }
   }
   delete [] byRead;
}
////////////////////////////////////////////////////////////////////
//对所属防区进行撤布防操作
////////////////////////////////////////////////////////////////////
void CGtMpegWnd::OpenZoneAlarm(CZone *pZone)
{
	  int nZone=pZone->GetSort();
	  int nChunnel=pZone->GetBindChunnel();
	  CChunnel *pChunnel=GetChunnel(nChunnel);
	  //
	  BYTE byCommand[5];
	  int  nTmp=GetZonesStates(nChunnel);
	  byCommand[0]=(BYTE)0xcc;
      byCommand[1]=(BYTE)nChunnel;
      byCommand[2]=LOBYTE(nTmp);
      byCommand[3]=HIBYTE(nTmp);
	  byCommand[4]=(BYTE)0x10;
	  //
	  BOOL bCtrl=FALSE;
	  for(int i=0;i<16;i++)
	  {
	     BYTE byTmp=1;
		 if(pZone->m_Zone[i]==i)
		 {
		     CZone *pTmpZone=pChunnel->GetZone(pZone->m_Zone[i]);
			 if(pTmpZone->m_nCtrlWay==1)//一级控制
			 {
		        if(i>=0&&i<=7)
				{
		           byTmp<<=i;
		           if(pZone->m_bStates2==0)
				   {
		              byTmp=~byTmp;
                      byCommand[2]&=byTmp;
				   }
		           else
				   {
                      byCommand[2]|=byTmp;
				   }
				}
		        else
				{
		              byTmp<<=(i-8);
		              if(pZone->m_bStates2==0)
					  {
		                byTmp=~byTmp;
                        byCommand[3]&=byTmp;
					  }
		              else
					  {
                        byCommand[3]|=byTmp;
					  }
				}
				bCtrl=TRUE;
                pTmpZone->m_bStates2=pZone->m_bStates2;//置前端状态
			 }
			 else if(pTmpZone->m_nCtrlWay==2) //二级控制
			 {
			    if(pZone->m_bStates2)//撤布防防区进行布防操作
				{
					if(i>=0&&i<=7)
					{
					   byTmp<<=i;
					   if(pZone->m_bStates2==0)
					   {
						  byTmp=~byTmp;
						  byCommand[2]&=byTmp;
					   }
					   else
					   {
						  byCommand[2]|=byTmp;
					   }
					}
					else
					{
						  byTmp<<=(i-8);
						  if(pZone->m_bStates2==0)
						  {
							byTmp=~byTmp;
							byCommand[3]&=byTmp;
						  }
						  else
						  {
							byCommand[3]|=byTmp;
						  }
					}
				    bCtrl=TRUE; 
				}
				else if(!pZone->m_bStates2)//撤布防防区进行撤防操作
				{
				     if(!pTmpZone->m_bStates3)//该防区中心已撤防
					 {
						if(i>=0&&i<=7)
						{
						   byTmp<<=i;
						   if(pZone->m_bStates2==0)
						   {
							  byTmp=~byTmp;
							  byCommand[2]&=byTmp;
						   }
						   else
						   {
							  byCommand[2]|=byTmp;
						   }
						}
						else
						{
							  byTmp<<=(i-8);
							  if(pZone->m_bStates2==0)
							  {
								byTmp=~byTmp;
								byCommand[3]&=byTmp;
							  }
							  else
							  {
								byCommand[3]|=byTmp;
							  }
						}
				        bCtrl=TRUE; 
					 }
				}
                pTmpZone->m_bStates2=pZone->m_bStates2;//置

⌨️ 快捷键说明

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