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

📄 videocaptureview.cpp

📁 电子监控的网络编程实例
💻 CPP
📖 第 1 页 / 共 5 页
字号:



   if(RadarStatus.radar==1)//火花
	{
		hRadarThread=AfxBeginThread(ThreadRadar, NULL)->m_hThread;	
	}

   pcsDlg->GetDlgItem(IDC_STATIC_STATUS)->ShowWindow(SW_NORMAL);
   UpdateRadarStatus();	

//	WriteLog("系统启动成功");
	CListCtrl* pLC=(CListCtrl*)GetDlgItem(IDC_LIST_DATA);
	pLC->SetExtendedStyle(/*LVS_EX_GRIDLINES|*/LVS_EX_FULLROWSELECT);
	m_ctlLIST_ZDJC.SetExtendedStyle(LVS_EX_FULLROWSELECT);
#ifdef BIGFONT
	pLC->InsertColumn(0,"序号",LVCFMT_CENTER,90);
	pLC->InsertColumn(1,"速度",LVCFMT_CENTER,50);
	pLC->InsertColumn(2,"车牌号码",LVCFMT_CENTER,120);
	pLC->InsertColumn(3,"日期",LVCFMT_CENTER,170);
	pLC->InsertColumn(4,"地点",LVCFMT_CENTER,120);
//	pLC->InsertColumn(4,"速度",LVCFMT_CENTER,60);
	pLC->InsertColumn(5,"限速",LVCFMT_CENTER,50);

	m_ctlLIST_ZDJC.InsertColumn(0,"序号",LVCFMT_CENTER,60);
	m_ctlLIST_ZDJC.InsertColumn(1,"车牌号码",LVCFMT_CENTER,120);
	m_ctlLIST_ZDJC.InsertColumn(2,"车牌颜色",LVCFMT_CENTER,0);
	m_ctlLIST_ZDJC.InsertColumn(3,"稽查时间",LVCFMT_CENTER,0);
	m_ctlLIST_ZDJC.InsertColumn(4,"稽查地点",LVCFMT_CENTER,0);
	m_ctlLIST_ZDJC.InsertColumn(5,"特写路径",LVCFMT_CENTER,0);
	m_ctlLIST_ZDJC.InsertColumn(6,"号牌路径",LVCFMT_CENTER,0);
	m_ctlLIST_ZDJC.InsertColumn(7,"匹配号牌",LVCFMT_CENTER,200);
	m_ctlLIST_ZDJC.InsertColumn(8,"报警原因",LVCFMT_CENTER,300);
	m_ctlLIST_ZDJC.InsertColumn(9,"报警原因1",LVCFMT_CENTER,0);

#else
	pLC->InsertColumn(0,"序号",LVCFMT_CENTER,60);
	pLC->InsertColumn(1,"速度",LVCFMT_CENTER,60);
	pLC->InsertColumn(2,"车牌号码",LVCFMT_CENTER,100);
	pLC->InsertColumn(3,"日期",LVCFMT_CENTER,140);
	pLC->InsertColumn(4,"地点",LVCFMT_CENTER,60);
//	pLC->InsertColumn(3,"速度",LVCFMT_CENTER,40);
	pLC->InsertColumn(5,"限速",LVCFMT_CENTER,40);

	m_ctlLIST_ZDJC.InsertColumn(0,"序号",LVCFMT_CENTER,60);
	m_ctlLIST_ZDJC.InsertColumn(1,"车牌号码",LVCFMT_CENTER,120);
	m_ctlLIST_ZDJC.InsertColumn(2,"车牌颜色",LVCFMT_CENTER,0);
	m_ctlLIST_ZDJC.InsertColumn(3,"稽查时间",LVCFMT_CENTER,0);
	m_ctlLIST_ZDJC.InsertColumn(4,"稽查地点",LVCFMT_CENTER,0);
	m_ctlLIST_ZDJC.InsertColumn(5,"特写路径",LVCFMT_CENTER,0);
	m_ctlLIST_ZDJC.InsertColumn(6,"号牌路径",LVCFMT_CENTER,0);
	m_ctlLIST_ZDJC.InsertColumn(7,"匹配号牌",LVCFMT_CENTER,200);
	m_ctlLIST_ZDJC.InsertColumn(8,"报警原因",LVCFMT_CENTER,300);
	m_ctlLIST_ZDJC.InsertColumn(9,"报警原因1",LVCFMT_CENTER,0);
	

#endif
	//初始化流动稽查参数
	{
		ZDJC=FALSE;
		m_ctlLIST_ZDJC.ShowWindow(SW_HIDE);
	}
	
	

	//初始化Com端口
	m_iBufLength=0;
	m_CommPort =::GetPrivateProfileInt("SYSTEM","COM",5,".\\Config.ini");
	if(!ComOpen(m_CommPort))
	{
		CDlgComSet dlg;
		IsCapturing=FALSE;
		dlg.DoModal();
	};


	if((TransMode==1) ||(TransMode==2) )
		Listen();//Socket侦听
	else if (TransMode==3)
	{
		::WaitForSingleObject(hThreadCopy,INFINITE); //等待旧的传输线程结束
		//	::CloseHandle(pView->hThreadCopy);
		DATASEND* ptp = new DATASEND;
		ptp->pView = this;
		ExitSendDataThread=FALSE;
		pThreadDataSend=AfxBeginThread(ThreadDataSend, ptp,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
		::DuplicateHandle(GetCurrentProcess(),pThreadDataSend->m_hThread,GetCurrentProcess(),&hThreadCopy,0,FALSE,DUPLICATE_SAME_ACCESS);
		pThreadDataSend->ResumeThread();
	}


	m_iSpeedTemp=m_iSpeed;

	m_nKSSJ=GetTickCount();

	dwDltTime=GetTickCount()-dwDltTime;
	CString s;
	s.Format("%ld",dwDltTime);

	m_bExitInitThread=false;
	hInitParam=AfxBeginThread(ThreadInitParam,this,0,CREATE_SUSPENDED);
	hInitParam->m_bAutoDelete=false;
	hInitParam->ResumeThread();
	
 }


/***---------------------------------------------------------------------****
调整界面布局
****---------------------------------------------------------------------***/
void CVideoCaptureView::OnSize(UINT nType, int cx, int cy) 
{
	//当视频源大小改变时自动,继续写入原avi出错。在此处自动停止avi录制
	if(m_VC.IsRecording())
	{
		m_VC.StopAVI();
		GetDlgItem(IDC_BTNVIDEOCAP)->SetWindowText("手动抓拍视频(K)");
		GetDlgItem(IDC_BTNIMAGECAP)->EnableWindow(TRUE);
		GetDlgItem(IDC_BTNVIDEOCAP)->SetFocus();
	}


	CRect rect;
	GetClientRect(&rect);

	CWnd* pWnd = GetDlgItem(IDC_VIDEO);
	if(pWnd)
	{
		pWnd->SetWindowPos(NULL,10,10,(rect.Width()-30)*2/5,(rect.Width()-30)*3/10,0);
		rectVideo=CRect(15,20+5,(rect.Width()-30)*2/5+5,(rect.Width()-30)*3/10+5);
		GetDlgItem(IDC_DRAWVEDIO)->SetWindowPos(0,15,25,(rect.Width()-30)*2/5-10,(rect.Width()-30)*3/10-20,0);
	}

	pWnd = GetDlgItem(IDC_IMAGE);
	if(pWnd)
	{		
		pWnd->SetWindowPos(NULL,20+(rect.Width()-30)*2/5,10,(rect.Width()-30)*2/5,(rect.Width()-30)*3/10,0);
		rectImage=CRect(20+5+(rect.Width()-30)*2/5,10+15,(rect.Width()-30)*4/5+15,(rect.Width()-30)*3/10+5);
	}



	pWnd = GetDlgItem(IDC_DATA);

	if(pWnd)
	{
		pWnd->SetWindowPos(NULL,10,20+(rect.Width()-30)*3/10,(rect.Width()-30)*2/5,rect.Height()-(rect.Width()-30)*3/10-30+10,0);
		GetDlgItem(IDC_LIST_DATA)->SetWindowPos(NULL,20,40+(rect.Width()-30)*3/10,(rect.Width()-30)*2/5-20,rect.Height()-(rect.Width()-30)*3/10-60+10,0);
		GetDlgItem(IDC_LIST_ZDJC)->SetWindowPos(NULL,20,40+(rect.Width()-30)*3/10,(rect.Width()-30)*4/5-20,rect.Height()-(rect.Width()-30)*3/10-60+10,0);
		
	}
	

	pWnd = GetDlgItem(IDC_SMALLIMAGE);
	if(pWnd)
	{
		pWnd->SetWindowPos(NULL,20+(rect.Width()-30)*2/5,20+(rect.Width()-30)*3/10,(rect.Width()-30)*2/5,rect.Height()-(rect.Width()-30)*3/10-180,0);
		if (pcsDlg)
		{	
			pcsDlg->SetWindowPos(NULL,5+20+(rect.Width()-30)*2/5,20+(rect.Width()-30)*3/10,420,140,0);
		}
	}
	
	
	/*
	pWnd = GetDlgItem(IDC_STATIC_CK);
	if(pWnd)
	{
		pWnd->SetWindowPos(NULL,20+(rect.Width()-30)*2/5,20+(rect.Width()-30)*3/10+150,(rect.Width()-30)*2/5,rect.Height()-(rect.Width()-30)*3/10-180,0);
		
	}*/

	pWnd = GetDlgItem(IDC_STATIC_CK);
	if(pWnd)
	{
		pWnd->SetWindowPos(NULL,10,20+(rect.Width()-30)*3/10,rectImage.right-rectVideo.left +10,rect.Height()-(rect.Width()-30)*3/10-30+10,0);
			
	}

	

	pWnd=NULL;
	pWnd = GetDlgItem(IDC_BTNQUIT);
	if(pWnd) 
	{
		CRect rect123;
		pWnd->GetWindowRect(&rect123);	
		rect123.bottom=rect123.top+40*cy/645;
		if(cx<800)
			DispBigMode=FALSE;
		else 
			DispBigMode=TRUE;

#ifdef BIGFONT
		pWnd->SetWindowPos(NULL,cx-rect123.Width(),cy-rect123.Height()-20*cy/645,rect123.Width(),rect123.Height(),0);
		
		pWnd = GetDlgItem(IDC_BTNSHOWVEDIO);
		if(pWnd)
			pWnd->SetWindowPos(NULL,cx-rect123.Width(),cy-rect123.Height()*9-105*cy/645,rect123.Width(),rect123.Height(),0);
		
		pWnd = GetDlgItem(IDC_BTNDEAL);
		if(pWnd)
			pWnd->SetWindowPos(NULL,cx-rect123.Width(),cy-rect123.Height()*2-35*cy/645,rect123.Width(),rect123.Height(),0);
		
		pWnd = GetDlgItem(IDC_BTNLOG);
		if(pWnd)
			pWnd->SetWindowPos(NULL,cx-rect123.Width(),cy-rect123.Height()*3-45*cy/645,rect123.Width(),rect123.Height(),0);
		
		pWnd = GetDlgItem(IDC_BTNLDJC);
		if(pWnd)
			pWnd->SetWindowPos(NULL,cx-rect123.Width(),cy-rect123.Height()*8-95*cy/645,rect123.Width(),rect123.Height(),0);
		
		pWnd = GetDlgItem(IDC_BTNVIDEOCAP);
		if(pWnd)
			pWnd->SetWindowPos(NULL,cx-rect123.Width(),cy-rect123.Height()*4-55*cy/645,rect123.Width(),rect123.Height(),0);
		
		pWnd = GetDlgItem(IDC_BTNIMAGECAP);
		if(pWnd)
			pWnd->SetWindowPos(NULL,cx-rect123.Width(),cy-rect123.Height()*5-65*cy/645,rect123.Width(),rect123.Height(),0);
		
		pWnd = GetDlgItem(IDC_BTNAUTOSET);
		if(pWnd)
			pWnd->SetWindowPos(NULL,cx-rect123.Width(),cy-rect123.Height()*6-75*cy/645,rect123.Width(),rect123.Height(),0);		
		
		pWnd = GetDlgItem(IDC_BTNSETRADAR);
		if(pWnd)
			pWnd->SetWindowPos(NULL,cx-rect123.Width(),cy-rect123.Height()*7-85*cy/645,rect123.Width(),rect123.Height(),0);
	
		pWnd = GetDlgItem(IDC_HPTX);
		if(pWnd)
			pWnd->SetWindowPos(NULL,cx-rect123.Width(),cy-rect123.Height()*9-160*cy/645,rect123.Width(),rect123.Height()+10,0);
		
#else
		pWnd->SetWindowPos(NULL,cx-rect123.Width()-20,cy-rect123.Height()-20*cy/645,rect123.Width(),rect123.Height(),0);
		pWnd = GetDlgItem(IDC_BTNDEAL);
		if(pWnd)
			pWnd->SetWindowPos(NULL,cx-rect123.Width()-20,cy-rect123.Height()*2-35*cy/645,rect123.Width(),rect123.Height(),0);
	
		pWnd = GetDlgItem(IDC_BTNSHOWVEDIO);
		if(pWnd)
			pWnd->SetWindowPos(NULL,cx-rect123.Width()-20,cy-rect123.Height()*9-105*cy/645,rect123.Width(),rect123.Height(),0);

		pWnd = GetDlgItem(IDC_BTNLOG);
		if(pWnd)
			pWnd->SetWindowPos(NULL,cx-rect123.Width()-20,cy-rect123.Height()*3-45*cy/645,rect123.Width(),rect123.Height(),0);
		
		pWnd = GetDlgItem(IDC_BTNLDJC);
		if(pWnd)
			pWnd->SetWindowPos(NULL,cx-rect123.Width()-20,cy-rect123.Height()*8-95*cy/645,rect123.Width(),rect123.Height(),0);
		
		pWnd = GetDlgItem(IDC_BTNVIDEOCAP);
		if(pWnd)
			pWnd->SetWindowPos(NULL,cx-rect123.Width()-20,cy-rect123.Height()*4-55*cy/645,rect123.Width(),rect123.Height(),0);
		

		pWnd = GetDlgItem(IDC_BTNIMAGECAP);
		if(pWnd)
			pWnd->SetWindowPos(NULL,cx-rect123.Width()-20,cy-rect123.Height()*5-65*cy/645,rect123.Width(),rect123.Height(),0);

		pWnd = GetDlgItem(IDC_BTNAUTOSET);
		if(pWnd)
			pWnd->SetWindowPos(NULL,cx-rect123.Width()-20,cy-rect123.Height()*6-75*cy/645,rect123.Width(),rect123.Height(),0);



		pWnd = GetDlgItem(IDC_BTNSETRADAR);
		if(pWnd)
			pWnd->SetWindowPos(NULL,cx-rect123.Width()-20,cy-rect123.Height()*7-85*cy/645,rect123.Width(),rect123.Height(),0);
	
	
		pWnd = GetDlgItem(IDC_HPTX);
		if(pWnd)
			pWnd->SetWindowPos(NULL,cx-rect123.Width()-30,cy-rect123.Height()*9-170*cy/645,rect123.Width()+20,rect123.Height()+10,0);
#endif

		rectPic=CRect(cx-150,5,cx-50,5+70);

	}
	pWnd = NULL;
		
	CFormView::OnSize(nType, cx, cy);
}

/***---------------------------------------------------------------------****
处理视频,不断的显示帧图像
****---------------------------------------------------------------------***/
void CVideoCaptureView::OnTimer(UINT nIDEvent) 
{


	//实时显示视频(实质是不断的更新图像)
	if(nIDEvent==IDC_TIME_CAPTURE)
	{
		if (!GetDlgItem(IDC_LIST_COM_DATA)->IsWindowVisible()) {		
			if(m_VC.IsRecording())
			{
				CDC* pDC=GetDC();
				try{
					m_VC.ShowVideo(pDC->m_hDC,rectVideo.left,rectVideo.top,rectVideo.Width(),rectVideo.Height());
				}catch (...) {
					WriteLog("ShowVideo error");
				}
				ReleaseDC(pDC);

			}
			else{
				if (!ZDJC) {
					LPBYTE pImage=new BYTE[768*576*3+54]; 
					int *iResult=m_VC.Capture(pImage,m_nChanel,true,10);
					if (iResult) {				
						CDC *pDC=GetDC();
						m_VC.DrawImage(pImage,pDC->m_hDC,rectVideo.left,rectVideo.top,rectVideo.Width(),rectVideo.Height());
						ReleaseDC(pDC);
					}
					delete[] pImage;
				}
				
			}
		}
	}	
	else if(nIDEvent==WM_SENDRADARCTRL)
	{
		if (RadarStatus.radar) {
			SendDataToCom(bufSend,2);
		}		
	}

	CFormView::OnTimer(nIDEvent);
}

/***-------------------------------------------------------------------------
设置输入方式和频道
-------------------------------------------------------------------------***/

void CVideoCaptureView::OnChannelOne() 
{

}
void CVideoCaptureView::OnChannelTwo() 
{

}
void CVideoCaptureView::OnSVideo() 
{

}
void CVideoCaptureView::OnUpdateSVideo(CCmdUI* pCmdUI) 
{

}
void CVideoCaptureView::OnUpdateChannelOne(CCmdUI* pCmdUI) 
{
	
}
void CVideoCaptureView::OnUpdateChannelTwo(CCmdUI* pCmdUI) 
{

}

/***-------------------------------------------------------------------------
设置逐行扫描和隔行扫描方式 
TRUE=隔行扫描 FALSE=逐行扫描
-------------------------------------------------------------------------***/
void CVideoCaptureView::OnInterlaced() 
{
	
}
void CVideoCaptureView::OnUpdateInterlaced(CCmdUI* pCmdUI) 
{

}

//获得当前视图
void CVideoCaptureView::OnJpgQuality() 
{
	IsCapturing=FALSE;
//	CDlgJpgQualitySet dlg;
//	dlg.DoModal();
}

CVideoCaptureView* CVideoCaptureView::GetView()
{
	CFrameWnd *pFrame = (CFrameWnd *)(AfxGetApp()->m_pMainWnd);
	CView *pView = pFrame->GetActiveView();
	if (!pView)
		return NULL;
	if (!pView->IsKindOf(RUNTIME_CLASS(CVideoCaptureView)))
		return NULL;
	return (CVideoCaptureView *)pView;
}

//重绘图像
void CVideoCaptureView::OnPaint() 
{

	CPaintDC dc(this); // device context for painting

	
	//绘制公司标志
	CBitmap BmpBack,*pOldBack; 
	//	BmpBack.LoadBitmap(IDB_BACKGROUND); 
	
	CDC dcBack; 
	dcBack.CreateCompatibleDC(&dc); 
	pOldBack=dcBack.SelectObject(&BmpBack); 
	
	if(!HT)
	{
		dc.BitBlt(0,0,113,85,&dcBack,0,0,SRCCOPY); 
		DrawTransparentBitmap(&dc,IDB_HT2,rectPic,RGB(255,255,255)); 
	}
	else
	{
		dc.BitBlt(0,0,150,75,&dcBack,0,0,SRCCOPY); 
		DrawTransparentBitmap(&dc,IDB_HT,rectPic,RGB(0,0,0)); 
	}
	dcBack.SelectObject(pOldBack);
	
	
	LOGFONT lf;
	::ZeroMemory(&lf,sizeof(lf));
	
	if(GSMC.GetLength()<32)
		lf.lfHeight=96;
	else
		lf.lfHeight=84;
	::lstrcpy(lf.lfFaceName,_T("宋体"));
	CFont font;
	
	font.CreatePointFontIndirect(&lf);	
	dc.SetBkMode(TRANSPARENT);
	CFont * pOldFont=dc.SelectObject(&font);
	if(DispBigMode)		
	{
		if(GSMC.GetLength()<32)
			dc.TextOut(rectPic.left-35,80,GSMC);
		else
			dc.TextOut(rectPic.left-35,80,GSMC);
	}
	else
	{
		if(GSMC.GetLength()<32)
			dc.TextOut(rectPic.left-40,80,GSMC);
		else
			dc.TextOut(rectPic.left-45,80,GSMC);
	}
	
	dc.SelectObject(pOldFont);
	if(DispBigMode)
	{
		if(GSMC.GetLength()<32)
			dc.TextOut(rectPic.left+20,85+10,"开发研制");
		else
			dc.TextOut(rectPic.left+20,85+10,"开发研制");
	}
	else
	{
		if(GSMC.GetLength()<32)
			dc.TextOut(rectPic.left+20,85+10,"开发研制");
		else
			dc.TextOut(rectPic.left+20,85+10,"开发研制");
	}		

⌨️ 快捷键说明

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