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

📄 videocaptureview.cpp

📁 电子监控的网络编程实例
💻 CPP
📖 第 1 页 / 共 5 页
字号:
					RadarStatus.distance=0;
					UpdateRadarStatus();
					return -1;	
				case 0x3A: //最大距离
					if(m_fInitRadar)
					{
						//位置
						if(RadarStatus.position!=0)
							bufSend[1]=0x53;
						else bufSend[1]=0x43;
						
						RadarStatus.position=1;
					}
					else
					{				
						m_fSendDataToCom=FALSE;
						KillTimer(WM_SENDRADARCTRL);
					}
					TRACE("最大距离\n");
					m_iBufLength=0;
					RadarStatus.distance=1;
					UpdateRadarStatus();
					return -1;
				case 0x3B://最小距离
					if(m_fInitRadar)
					{
						//位置
						if(RadarStatus.position!=0)
							bufSend[1]=0x53;
						else bufSend[1]=0x43;
						
						RadarStatus.position=1;
					}
					else
					{				
						m_fSendDataToCom=FALSE;
						KillTimer(WM_SENDRADARCTRL);
					}
					TRACE("最小距离\n");
					m_iBufLength=0;
					RadarStatus.distance=-1;
					UpdateRadarStatus();
					return -1;
				case 0x3C://逆相目标
					if(m_fInitRadar)
					{
						m_fInitRadar=FALSE;
						KillTimer(WM_SENDRADARCTRL);
					}
					else
					{				
						m_fSendDataToCom=FALSE;
						KillTimer(WM_SENDRADARCTRL);
					}
					
					TRACE("相对方向\n");
					m_iBufLength=0;
					RadarStatus.driveway=1;
					UpdateRadarStatus();
					return -1;
				case 0x3D://同向目标
					if(m_fInitRadar)
					{
						m_fInitRadar=FALSE;
						KillTimer(WM_SENDRADARCTRL);
					}
					else
					{				
						m_fSendDataToCom=FALSE;
						KillTimer(WM_SENDRADARCTRL);
					}
					TRACE("相同方向\n");
					m_iBufLength=0;
					RadarStatus.driveway=0;
					UpdateRadarStatus();
					return -1;
				case 0x3E://所有目标
					if(m_fInitRadar)
					{
						m_fInitRadar=FALSE;
						KillTimer(WM_SENDRADARCTRL);
					}
					else
					{				
						m_fSendDataToCom=FALSE;
						KillTimer(WM_SENDRADARCTRL);
					}
					TRACE("所有目标\n");
					m_iBufLength=0;
					RadarStatus.driveway=-1;
					UpdateRadarStatus();
					return -1;
				case 0x40:
					if(m_fInitRadar)
					{
					}
					else
					{
						m_fSendDataToCom=FALSE;
						KillTimer(WM_SENDRADARCTRL);
					}
					TRACE("按扳机\n");
					m_iBufLength=0;
					UpdateRadarStatus();
					return -1;
				case 0x41:
					if(m_fInitRadar)
					{
					}
					else
					{
						m_fSendDataToCom=FALSE;
						KillTimer(WM_SENDRADARCTRL);
					}
					TRACE("松开班机\n");
					m_iBufLength=0;
					UpdateRadarStatus();
					return -1;
				case 0x43://后窗
					if(m_fInitRadar)
					 {
						  //车辆相对方向
						  if(RadarStatus.driveway>0)
							  bufSend[1]=0x3C;
						  else if(RadarStatus.driveway<0)
							  bufSend[1]=0x3E;
						  else bufSend[1]=0x3D;
						  
						  RadarStatus.driveway=1;
					  }
					else
					{
						m_fSendDataToCom=FALSE;
						KillTimer(WM_SENDRADARCTRL);
					}
					TRACE("通过汽车后窗测速\n");
					m_iBufLength=0;
					RadarStatus.position=0;
					UpdateRadarStatus();
					return -1;
				case 0x53://前窗
					if(m_fInitRadar)
					{
						//车辆相对方向
						if(RadarStatus.driveway>0)
							bufSend[1]=0x3C;
						else if(RadarStatus.driveway<0)
							bufSend[1]=0x3E;
						else bufSend[1]=0x3D;
						
						RadarStatus.driveway=1;
					}
					else
					{
						m_fSendDataToCom=FALSE;
						KillTimer(WM_SENDRADARCTRL);
					}
					TRACE("通过汽车前窗测速\n");
					m_iBufLength=0;
					RadarStatus.position=1;
					UpdateRadarStatus();
					return -1;
				case 0x50:
					if(m_fInitRadar)
					{
					}
					else
					{
						m_fSendDataToCom=FALSE;
					KillTimer(WM_SENDRADARCTRL);
					}
					TRACE("设备命令接受准备好\n");
					m_iBufLength=0;
					return -1;
				}
			}

		return -1;
	}
	//现代雷达
	else if (RadarStatus.radar==-1)
	{//	5a 5a 5a 5a 00 02 目标车速 锁定车速 巡逻车速 目标车速反码 锁定车速反码 巡逻车速反码
		
		int j=-1,k=-1,num=0;
		for(int i=length-12;i>-1;i--)
		{
			if((ComBuf[i]==0x5A) && (ComBuf[i+1]==0x5A) && (ComBuf[i+2]==0x5A) && (ComBuf[i+3]==0x5A) && (ComBuf[i+4]==0x00) && (ComBuf[i+5]==0x02))
			{
				if (((ComBuf[i+6]+ComBuf[i+9])!=255) || ((ComBuf[i+7]+ComBuf[i+10])!=255) || ((ComBuf[i+8]+ComBuf[i+11])!=255))
				{
					//校验失败
				}
				else
				{
					return i;
				}
			}
		}
		j=-1;k=-1;num=0;
	for(i=length-9;i>-1;i--)
	{
		//获得范围
		if((ComBuf[i]==0x5A) && (ComBuf[i+1]==0x5A) && (ComBuf[i+2]==0x5A) && (ComBuf[i+3]==0x5A) && (ComBuf[i+4]==0x00) && (ComBuf[i+5]==0x00) && (ComBuf[i+6]==0x17) && (ComBuf[i+8]==0x00))
		{
			RadarStatus.distance = ComBuf[i+7];
	//		KillTimer(WM_SENDRADARCTRL);
			m_iBufLength=0;

			return -1;
		}

			//本车模式
		if((ComBuf[i]==0x5A) && (ComBuf[i+1]==0x5A) && (ComBuf[i+2]==0x5A) && (ComBuf[i+3]==0x5A) && (ComBuf[i+4]==0x00) && (ComBuf[i+5]==0x00) && (ComBuf[i+6]==0x1A) && (ComBuf[i+8]==0x00))
		{
			RadarStatus.mode = ComBuf[i+7];			
			m_iBufLength=0;
			UpdateRadarStatus();
			return -1;
		}
		//速度模式
		if((ComBuf[i]==0x5A) && (ComBuf[i+1]==0x5A) && (ComBuf[i+2]==0x5A) && (ComBuf[i+3]==0x5A) && (ComBuf[i+4]==0x00) && (ComBuf[i+5]==0x00) && (ComBuf[i+6]==0x18) && (ComBuf[i+8]==0x00))
		{
			//	0最快车速 1最慢车速 2最近车速
			RadarStatus.SpeedMode = ComBuf[i+7];
			//设置方向模式
			m_iBufLength=0;
			UpdateRadarStatus();
			return -1;
		}
		if (RadarStatus.controlMode==1) {
			//	5a 5a 5a 5a 00 02 目标车速 锁定车速 巡逻车速 目标车速反码 锁定车速反码 巡逻车速反码	
			int j=-1,k=-1,num=0;
			for(i=length-12;i>-1;i--)
			{
				if((ComBuf[i]==0x5A) && (ComBuf[i+1]==0x5A) && (ComBuf[i+2]==0x5A) && (ComBuf[i+3]==0x5A) && (ComBuf[i+4]==0x00) && (ComBuf[i+5]==0x02))
				{
					if (((ComBuf[i+6]+ComBuf[i+9])!=255) || ((ComBuf[i+7]+ComBuf[i+10])!=255) || ((ComBuf[i+8]+ComBuf[i+11])!=255))
					{
						//校验失败
						WriteLog("测速校验失败!");
					}
					else
					{
						return i;
					}
				}
			}
		}else if (RadarStatus.controlMode==2) {
			//5a 5a 5a 5a 00 02 目标车速低8位 锁定车速低8位 巡逻车速低8位 目标车速反码低8位 锁定车速反码低8位 巡逻车速
			//反码低8位 目标车速高8位 锁定车速高8位 巡逻车速高8位 目标车速反码高8位 锁定车速反码高8位 巡逻车速反码高8位
			for(int i=length-18;i>-1;i--)
			{
				if((ComBuf[i]==0x5A) && (ComBuf[i+1]==0x5A) && (ComBuf[i+2]==0x5A) && (ComBuf[i+3]==0x5A) && (ComBuf[i+4]==0x00) && (ComBuf[i+5]==0x02))
				{
					if (((ComBuf[i+6]+ComBuf[i+9])!=255) || ((ComBuf[i+7]+ComBuf[i+10])!=255) || ((ComBuf[i+8]+ComBuf[i+11])!=255) 
						|| ((ComBuf[i+13]+ComBuf[i+16])!=255)||((ComBuf[i+14]+ComBuf[i+17])!=255) ||((ComBuf[i+15]+ComBuf[i+18])!=255) )
					{
						//校验失败
						WriteLog("测速校验失败!");
					}
					else
					{
						return i;
					}
				}
			}
		}

		
		//方向模式
		if((ComBuf[i]==0x5A) && (ComBuf[i+1]==0x5A) && (ComBuf[i+2]==0x5A) && (ComBuf[i+3]==0x5A) && (ComBuf[i+4]==0x00) && (ComBuf[i+5]==0x00) && (ComBuf[i+6]==0x19) && (ComBuf[i+8]==0x00))
		{
			RadarStatus.driveway = ComBuf[i+7];
			m_iBufLength=0;
			UpdateRadarStatus();
			return -1;
		}
	}
	for(i=length-8;i>-1;i--)
	{
		//获得雷达启动指令5A 5A 5A 5A 00 04 37 02
		if((ComBuf[i]==0x5A) && (ComBuf[i+1]==0x5A) && (ComBuf[i+2]==0x5A) && (ComBuf[i+3]==0x5A) && (ComBuf[i+4]==0x00) && (ComBuf[i+5]==0x04) && (ComBuf[i+6]==0x37) && (ComBuf[i+7]==0x02))
		{
			m_iBufLength=0;
			InitRadar();

			return -1;
		}
	}
	return -1;
	}
	return -1;
}

void CVideoCaptureView::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
	if(pbiDlg==NULL)
	{
		pbiDlg=new CDlgBigImage();
		pbiDlg->Create(IDD_VIEW_BIG_IMAGE,this)	;		
	}
	CRect rect;
	BOOL show=FALSE;
	
	if (!ZDJC) {	
		rect=CRect(rectImage.left,rectImage.top,rectImage.left+rectImage.Width()/2-2,rectImage.top+rectImage.Height()/2-2);//左上全景
		if(!m_VC.IsRecording()&& rect.PtInRect(point))
		{
			if(m_hDib[thisBlockNum][0][1])
			{
				pbiDlg->m_image.SetBitmap(DIBtoDDB(m_hDib[thisBlockNum][0][1]));
				show=TRUE;
			}
		}
		rect=CRect(rectImage.left+2+rectImage.Width()/2,rectImage.top,rectImage.right-2,rectImage.top+rectImage.Height()/2-2);//右上第一张特写
		if(!m_VC.IsRecording()&& rect.PtInRect(point))
		{
			if(m_hDib[thisBlockNum][0][0])
			{
				pbiDlg->m_image.SetBitmap(DIBtoDDB(m_hDib[thisBlockNum][0][0]));
				show=TRUE;
			}
		}
		rect=CRect(rectImage.left,rectImage.top+2+rectImage.Height()/2,rectImage.left+rectImage.Width()-2,rectImage.bottom-2);//左下第二张特写
		if(!m_VC.IsRecording()&& rect.PtInRect(point))
		{
			if(m_hDib[thisBlockNum][1][0])
			{
				pbiDlg->m_image.SetBitmap(DIBtoDDB(m_hDib[thisBlockNum][1][0]));
				show=TRUE;
			}
		}

		rect=CRect(rectImage.left+2+rectImage.Width()/2,rectImage.top+2+rectImage.Height()/2,rectImage.right-2,rectImage.bottom-2);//右下第二张特写
		if(!m_VC.IsRecording()&& rect.PtInRect(point))
		{
			if(m_hDib[thisBlockNum][2][0])
			{
				pbiDlg->m_image.SetBitmap(DIBtoDDB(m_hDib[thisBlockNum][2][0]));
				show=TRUE;
			}
		}
	}
	if (ZDJC) {
		if(rectImage.PtInRect(point))
		{
			if(m_hDib[thisBlockNum][0][0])
			{
				pbiDlg->m_image.SetBitmap(DIBtoDDB(m_hDib[thisBlockNum][0][0]));
				show=TRUE;
			}
		}
	}

	if(show)
	{

		CDC* pDC=GetDC();
		int x=GetDeviceCaps(pDC->m_hDC,HORZRES);//得到屏幕宽度
		int y=GetDeviceCaps(pDC->m_hDC,VERTRES);//得到屏幕高度
		ReleaseDC(pDC);

		CBitmap pp;
		pp.Attach(pbiDlg->m_image.GetBitmap());
		BITMAP bb;
		pp.GetBitmap(&bb);
		pp.Detach();

		
		//昆山DS//版
		pbiDlg->SetWindowPos(NULL,(x-bb.bmWidth)/2,(y-bb.bmHeight)/2,bb.bmWidth+5,bb.bmHeight+32,0);
		pbiDlg->ShowWindow(SW_NORMAL);
	}

	CFormView::OnLButtonDblClk(nFlags, point);
}

void CVideoCaptureView::OnDblclkListData(NMHDR* pNMHDR, LRESULT* pResult) 
{

	if (m_VC.IsRecording()) {
		return;			
	}

	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	CListCtrl* pLC=(CListCtrl*)GetDlgItem(IDC_LIST_DATA);
	{
		CString str=pLC->GetItemText(pNMListView->iItem,0);
		long id=atol(str.GetBuffer(0));
		//sscanf(str,"%ld",&id);
		if(id>0)
		{
			IsCapturing=FALSE;
			CDlgDataView dlg;      //数据查看修改对话框
			dlg.m_lRecordID=id;
			dlg.DoModal();
			
			IsCapturing=TRUE;
		}
	}
	*pResult = 0;
}


//当数据改变时,同时更新 主界面上的  数据修改 框
void CVideoCaptureView::DataHaveChange(WPARAM wParam, LPARAM lParam)
{


}

void CVideoCaptureView::ImageHaveSave(WPARAM wParam, LPARAM lParam)
{
//	ShowMessage("bb");
	CString sql;
	CString hp;
	if (HPZL[(int)wParam]==1)
		hp="01";
	else if (HPZL[(int)wParam]==2)
		hp="02";
	else hp="24";
	CString himage=HPImage[int(wParam)];
	CString hLicense=ThisLicense[int(wParam)];
	
	UINT RecNum=UINT(lParam);
	//修改主界面主界面 列表框的选中 项
	if(RecNum>0)
	{
		CListCtrl* pLC=(CListCtrl*)GetDlgItem(IDC_LIST_DATA);					
		for(int i=0;i<pLC->GetItemCount();i++)
		{
			if(atol(pLC->GetItemText(i,0))==RecNum)//m_lRecordID)
			{
				pLC->SetItemText(i,2,hLicense);
				break;
			}
		}					
	}
				

	sql.Format("update record set DEAL='1', ZPXH=%ld, HPZL='%s',HPYS=%d,HPTP='%s',HPHM='%s' where XH=%ld",UINT(lParam),hp,HPYS[(int)wParam],DataPath+"\\"+ himage,hLicense,UINT(lParam));
	try
	{
		pConn->Execute(sql);
	}
	catch (...) {
	}
	
	//释放内存,最后一组图像不释放,用以界面更新
	int aa=int(wParam);
	if ((aa>3)||(aa<0))
		aa=0;
	if(!MemoryStatus[aa] && aa!=thisBlockNum)
		for(int i=0;i<6;i++)
			for(int k=0;k<2;k++)
				if(m_hDib[aa][i][k])
				{
					GlobalFree(m_hDib[aa][i][k]);
			

⌨️ 快捷键说明

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