📄 videocaptureview.cpp
字号:
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 + -