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