📄 videocaptureview.cpp
字号:
// VideoCaptureView.cpp : implementation of the CVideoCaptureView class
//
#include "stdafx.h"
#include "MainFrm.h"
#include "VideoCapture.h"
#include "VideoCaptureDoc.h"
#include "VideoCaptureView.h"
#include "DlgDataView.h"
#include "DlgComSet.h"
#include "DlgSetCapParam.h"
#include "DlgSetRoad.h"
#include "SetPoliceUint.h"
#include "DlgSetCode.h"
#include "DlgSetCarType.h"
#include "DlgQuery.h"
#include "DlgMachine.h"
#include "DlgSRadar.h"
#include "DlgSetFTP.h"
//#include "DlgSetFlash.h"
#include "DlgSetBoxiRadar.h"
#include "MyReg.h"
#include "MyImage.h"
#include <math.h>
#include "global.h"
#include "DlgAlarmLook.h"
//#include "wininet.h"
//加密函数库(字符串加密) DeCode=TRUE加密false解密
typedef PCHAR (__stdcall * pPassWordCode)(PCHAR ByString,boolean DeCode= true);
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CVideoCaptureView
IMPLEMENT_DYNCREATE(CVideoCaptureView, CFormView)
BEGIN_MESSAGE_MAP(CVideoCaptureView, CFormView)
//{{AFX_MSG_MAP(CVideoCaptureView)
ON_MESSAGE(WM_HAOPAI_IMAGE, DrawHaoPai)
ON_MESSAGE(WM_DELETE_IMAGE_FINISHED,ImageHaveDelete)
ON_WM_SIZE()
ON_WM_TIMER()
ON_COMMAND(ID_CHANNEL_ONE, OnChannelOne)
ON_COMMAND(ID_CHANNEL_TWO, OnChannelTwo)
ON_COMMAND(ID_S_VIDEO, OnSVideo)
ON_UPDATE_COMMAND_UI(ID_S_VIDEO, OnUpdateSVideo)
ON_UPDATE_COMMAND_UI(IDC_AUTO_TRANS, OnUpdateAutoTrans)
ON_UPDATE_COMMAND_UI(ID_CHANNEL_ONE, OnUpdateChannelOne)
ON_UPDATE_COMMAND_UI(ID_CHANNEL_TWO, OnUpdateChannelTwo)
ON_COMMAND(ID_INTERLACED, OnInterlaced)
ON_UPDATE_COMMAND_UI(ID_INTERLACED, OnUpdateInterlaced)
ON_COMMAND(ID_JPG_QUALITY, OnJpgQuality)
ON_WM_PAINT()
ON_UPDATE_COMMAND_UI(ID_CAPTURE_JPG, OnUpdateCaptureJpg)
ON_COMMAND(ID_CAPTURE_JPG, OnCaptureJpg)
ON_COMMAND(ID_IMAGE_COPY, OnImageCopy)
ON_COMMAND(ID_COMM_OPEN, OnCommOpen)
ON_UPDATE_COMMAND_UI(ID_COMM_OPEN, OnUpdateCommOpen)
ON_COMMAND(ID_CAPTURE_VIDEO, OnCaptureVideo)
ON_WM_LBUTTONDBLCLK()
ON_NOTIFY(NM_DBLCLK, IDC_LIST_DATA, OnDblclkListData)
ON_COMMAND(ID_STOP_CAPTURE, OnStopCapture)
ON_UPDATE_COMMAND_UI(ID_STOP_CAPTURE, OnUpdateStopCapture)
ON_UPDATE_COMMAND_UI(ID_CAPTURE_AVI, OnUpdateCaptureAvi)
ON_COMMAND(ID_CAPTURE_AVI, OnCaptureAvi)
ON_COMMAND(ID_COM_DATA_TEST, OnComDataTest)
ON_UPDATE_COMMAND_UI(ID_COM_DATA_TEST, OnUpdateComDataTest)
ON_BN_CLICKED(IDC_AUTO_CAPTURE, OnAutoCapture)
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_BTNQUIT, OnBtnquit)
ON_BN_CLICKED(IDC_BTNDEAL, OnBtndeal)
ON_BN_CLICKED(IDC_BTNLOG, OnBtnlog)
ON_COMMAND(IDC_SET_ROAD, OnSetRoad)
ON_COMMAND(IDC_SET_POLICE_UINT, OnSetPoliceUint)
ON_COMMAND(IDC_SET_CODE, OnSetCode)
ON_COMMAND(IDC_CAR_TYPE, OnCarType)
ON_COMMAND(IDC_SET_MACHINE, OnSetMachine)
ON_COMMAND(ID_SET_FTPSERVER, OnSetFtpserver)
ON_COMMAND(IDC_AUTO_TRANS, OnAutoTrans)
ON_UPDATE_COMMAND_UI(IDC_AUTO_CAPTURE, OnUpdateAutoCapture)
ON_COMMAND(ID_BKM, OnBkm)
ON_BN_CLICKED(IDC_BTNLDJC, OnBtnldjc)
ON_BN_CLICKED(IDC_BTNSHOWVEDIO, OnBtnshowvedio)
ON_MESSAGE(WM_DATA_HAVE_CHANGE,DataHaveChange)
ON_MESSAGE(WM_SAVE_IMAGE_FINISHED,ImageHaveSave)
ON_MESSAGE(WM_STOP_AVI,AviIsStop)
ON_COMMAND(ID_SET_COMM, OnSetComm)
ON_NOTIFY(NM_DBLCLK, IDC_LIST_ZDJC, OnDblclkListZdjc)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_BN_CLICKED(IDC_BTNIMAGECAP, OnBtnimagecap)
ON_BN_CLICKED(IDC_BTNSETRADAR, OnBtnsetradar)
ON_BN_CLICKED(IDC_BTNVIDEOCAP, OnBtnvideocap)
ON_BN_CLICKED(IDC_BTNAUTOSET, OnBtnautoset)
ON_COMMAND(ID_DEAL, OnDeal)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CVideoCaptureView construction/destruction
CVideoCaptureView::CVideoCaptureView()
: CFormView(CVideoCaptureView::IDD)
{
dwDltTime=GetTickCount();
m_nJCSave=false;
oldJCTP="";
HPTP="";
HT=true;
m_bShowVideo=true;//住界面显示视频
m_nChanel=1;//显示全景
m_bAutoTrans=true;
m_LastPoint=CPoint(0,0);
m_nJCSave=::GetPrivateProfileInt("system","jcsave",1,".\\config.ini");
//判断传输方式1=Socket 2=FTP; 0=no
TransMode=::GetPrivateProfileInt("NET","TRANSMODE",0,".\\config.ini");
if ( TransMode>3 )
TransMode=3;
else if ( TransMode<0 )
TransMode=0;
/************************************************************************/
/************************************************************************/
/* //check savedisk and saveDirectory */
/************************************************************************/
pDR=new CDataRecord();
pDR->InitRecordDB();
BYTE nNum=0;
bool bOK=true;
pDR->PrepareDisk(nNum);
DataPath=pDR->GetSaveDirectory();
if(GetFileAttributes(DataPath)!=FILE_ATTRIBUTE_DIRECTORY){
bOK=CreateDirectory(DataPath,NULL);
}
if (!bOK) {
AfxMessageBox("图片保存目录创建失败,程序即将关闭.");
delete pDR;
exit(0);
}
CTime tt=CTime::GetCurrentTime();
CString path;
path.Format("%0.4d%0.2d%0.2d%0.2d",tt.GetYear(),tt.GetMonth(),tt.GetDay(),tt.GetHour());
DataPath=DataPath+"\\"+path;
if(GetFileAttributes(DataPath)!=FILE_ATTRIBUTE_DIRECTORY){
bOK=CreateDirectory(DataPath,NULL);
}
if (!bOK) {
AfxMessageBox("图片保存目录创建失败,程序即将关闭..");
delete pDR;
exit(0);
}
pConn=pDR->pConn;
/************************************************************************/
CString ssss;
ssss.Format("%d",TransMode);
::WritePrivateProfileString("NET","TRANSMODE",ssss,".\\config.ini");
TCHAR str[256];
//自动稽查添加
ShibieParam.gray = ::GetPrivateProfileInt("VIDEO","GRAY",50,".\\config.ini");
ShibieParam.StartX=::GetPrivateProfileInt("VIDEO","STARTX",100,".\\config.ini");
ShibieParam.StartY=::GetPrivateProfileInt("VIDEO","STARTY",250,".\\config.ini");
ShibieParam.EndX=::GetPrivateProfileInt("VIDEO","ENDX",700,".\\config.ini");
ShibieParam.EndY=::GetPrivateProfileInt("VIDEO","ENDY",426,".\\config.ini");
ShibieParam.rate=::GetPrivateProfileInt("VIDEO","RATE",20,".\\config.ini");
m_iMatch=::GetPrivateProfileInt("VIDEO","MATCHNUM",5,".\\config.ini");
bFilt=::GetPrivateProfileInt("VIDEO","FILT",0,".\\config.ini");
if ((m_iMatch<0) || (m_iMatch>9))
m_iMatch=5;
ZDJC=FALSE;
pcsDlg=NULL;
//默认自动抓拍
m_bAutoCap=true;
GSMC="无锡华通智能交通技术有限公司";
thisBlockNum=0;
}
CVideoCaptureView::~CVideoCaptureView()
{
for(int j=0;j<4;j++)
for(int i=0;i<6;i++)
for(int k=0;k<2;k++)
{
if(m_hDib[j][i][k])
GlobalFree(m_hDib[j][i][k]);
}
if(pbiDlg)
pbiDlg->DestroyWindow();
delete pbiDlg;
if(pcsDlg)
pcsDlg->DestroyWindow();
delete pcsDlg;
ExitSendDataThread=TRUE;
m_ServerSkt.m_bConnected=FALSE;
// ::WaitForSingleObject(pView->hThreadCopy,INFINITE);
DWORD dwExitCode;
::GetExitCodeThread(hThreadCopy,&dwExitCode);
if(dwExitCode == STILL_ACTIVE)
{
// TerminateThread(pThreadDataSend->m_hThread,0);
pThreadDataSend->ResumeThread();
}
delete pDR;
}
void CVideoCaptureView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CVideoCaptureView)
DDX_Control(pDX, IDC_LIST_ZDJC, m_ctlLIST_ZDJC);
DDX_Control(pDX, IDC_MSCOMM_SPEED, m_Comm);
//}}AFX_DATA_MAP
}
void CVideoCaptureView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
//确保已经设置好机器编号和区域代码
CString name,code;
TCHAR straaa[MAX_PATH];
::GetPrivateProfileString("SYS","NAME","--",straaa,3,".\\Sys.ini");
name=straaa;
m_szMachineID=name;
::GetPrivateProfileString("SYS","CODE","------",straaa,7,".\\Sys.ini");
code=straaa;
m_szAddress=code;
if(name=="--" || code=="------")
{
CDlgMachine dlg;
dlg.DoModal();
}
//ftp上传系统
::GetPrivateProfileString("NET","FTP","www.tmri-china.com",straaa,MAX_PATH,".\\config.ini");
ftp.Server=straaa;
::GetPrivateProfileString("NET","USERID","cw33044",straaa,MAX_PATH,".\\config.ini");
ftp.UserID=straaa;
::GetPrivateProfileString("NET","PASSWORD","",straaa,MAX_PATH,".\\config.ini");
// ftp.Password=straaa;
//调用打印模版 打印报表
HINSTANCE hLibrary;
pPassWordCode PassWordCode;
hLibrary=LoadLibrary(".\\crypt.dll");
if(!hLibrary)
{
ShowMessage("加密模块crypt.dll丢失");
// return ;
}
PassWordCode=(pPassWordCode)GetProcAddress(hLibrary,"PassWordCode");
LPCSTR aa3;
aa3= (*PassWordCode)(straaa,false);
ftp.Password=aa3;
FreeLibrary(hLibrary);
if(TransMode==2/*Up IP*/)
{
int sResult=UpdateIP(ftp.Server,ftp.UserID,ftp.Password,".\\"+m_szMachineID+m_szAddress+".ini");
if(sResult!=0)
{
IsCapturing=FALSE;
CDlgSetFTP dlg;
dlg.DoModal();
IsCapturing=TRUE;
}
}
else if (TransMode==3/*FTP*/)
{
if (!ConnectFTP(ftp.Server, ftp.UserID, ftp.Password))
{
IsCapturing=FALSE;
CDlgSetFTP dlg;
dlg.DoModal();
IsCapturing=TRUE;
}
}
m_fCanGetSpeed=TRUE;
GetDlgItem(IDC_LIST_COM_DATA)->ShowWindow(SW_HIDE);
memset(ComBuf,0,100);
m_iBufLength=0;
//对话框 查看大图像
pbiDlg=NULL;
// m_BeginCapture=FALSE;
IsCapturing=TRUE;
m_JPG=TRUE;
// m_SnapAutoMode=TRUE;
thisBlockNum=0;
for(int j=0;j<4;j++)
{
MemoryStatus[j]=TRUE;
for(int i=0;i<6;i++)
{
m_hDib[j][i][0]=NULL;
m_hDib[j][i][1]=NULL;
}
}
m_iSpeed=50;
m_OldTargetSpeed=0;
m_OldLockSpeed=0;
m_OldFastSpeed=0;
m_PoliceSpeed=0;
TCHAR str[30];
::GetPrivateProfileString("SYSTEM","STATION","qrl-钱荣路",str,30,".\\Config.ini");
m_szDLBM=str;
int nPos=m_szDLBM.Find("-",0);
m_stationName=m_szDLBM;
if(nPos>0)
m_stationName=m_szDLBM.Right(m_szDLBM.GetLength()-nPos-1);
m_nNumBmp=::GetPrivateProfileInt("IMAGE","NUM",1,".\\config.ini");
if(m_nNumBmp>6) m_nNumBmp=6;
else if(m_nNumBmp<1) m_nNumBmp=1;
m_nNumBmp=3;
m_nThisBmpNum=1;
m_videoLimited=::GetPrivateProfileInt("IMAGE","MAXAVI",10,".\\config.ini");
if(m_videoLimited>30) m_videoLimited=30;
else if (m_videoLimited<1) m_videoLimited=1;
m_bFastMode=::GetPrivateProfileInt("SYSTEM","CARDMODE",1,".\\config.ini");
//jpg压缩质量因子
m_JpgQuality =::GetPrivateProfileInt("IMAGE","JPG",80,".\\Config.ini");
//限速
m_iSpeed=::GetPrivateProfileInt("SYSTEM","MAXSPEED",90,".\\Config.ini");
m_iSpeedDown=::GetPrivateProfileInt("SYSTEM","MINSPEED",50,".\\Config.ini");
m_iSpeedUp=::GetPrivateProfileInt("SYSTEM","SMALLCARSPEED",110,".\\Config.ini");
if(::GetPrivateProfileInt("SYSTEM","STARTMINSPEED",0,".\\Config.ini")==0)
m_bCapMinSpeed=FALSE;
else
m_bCapMinSpeed=TRUE;
//是否启用小车测速限速
if (::GetPrivateProfileInt("SYSTEM","STARTSMALLCARSPEED",0,".\\Config.ini")==0)
m_bCapSmallCarSpeed=FALSE;
else
m_bCapSmallCarSpeed=TRUE;
//民警单位
TCHAR policeuint[MAX_PATH];
::GetPrivateProfileString("SYSTEM","NAME","",policeuint,sizeof(policeuint),".\\Config.ini");
m_szPoliceUint=policeuint;
int iipos=m_szPoliceUint.Find("---");
if (iipos>0)
{
m_szPoliceUint=m_szPoliceUint.Left(iipos);
}
//是否默认显示保存 “默认违章路段”
if(GetPrivateProfileInt("SYSTEM","SAVESTATION",1,".\\Config.ini")==0)
m_bSaveStation=FALSE;
else m_bSaveStation=TRUE;
if(GetPrivateProfileInt("SYSTEM","SAVEWEIZHANG",1,".\\Config.ini")==0)
m_bSaveWeizhang=FALSE;
else m_bSaveWeizhang=TRUE;
::GetPrivateProfileString("SYSTEM","SPEEDCODE","2072",str,6,".\\Config.ini");
m_szUpSpeed=str;
::GetPrivateProfileString("SYSTEM","SLOWCODE","3022",str,6,".\\Config.ini");
m_szSlowSpeed=str;
//获得雷达类型 0-斯德克 1-火花
RadarStatus.radar=::GetPrivateProfileInt("RADAR","RADAR",1,".\\Config.ini");
/************************************************************************/
//设置雷达灵敏度 速度最小差值
RadarStatus.speeddif=::GetPrivateProfileInt("RADAR","SPEEDDIF",1,".\\Config.ini");
//设置雷达各种控制模式
RadarStatus.driveway = ::GetPrivateProfileInt("RADAR","DRIVEWAY",0,".\\Config.ini");
//车辆行驶方向 0-同向 >0逆向 <0所有目标
RadarStatus.distance = ::GetPrivateProfileInt("RADAR","DISTANCE",0,".\\Config.ini");
//测量距离 0-距离平均值 >0最大距离 <0最小距离
RadarStatus.mode = ::GetPrivateProfileInt("RADAR","MODE",0,".\\Config.ini");
//模式 !=0-运动 0-静止
RadarStatus.position = ::GetPrivateProfileInt("RADAR","POSITION",1,".\\config.ini");
//雷达位置 !=0-通过前窗测速 0-后窗测速
if(RadarStatus.radar==-1)
RadarStatus.SpeedMode = ::GetPrivateProfileInt("RADAR","SPEEDMODE",2,".\\config.ini");
//波西雷达测速方式(0最快车速 1最慢车速 2最近车速)
RadarStatus.controlMode=::GetPrivateProfileInt("RADAR","CONTROLMODE",1,".\\config.ini");
//波西雷达控制方式 1以前控制方式;2火花控制方式
FlashDelay = ::GetPrivateProfileInt("SYSTEM","FLASHDELAY",0,".\\config.ini");
CapDelay=::GetPrivateProfileInt("SYSTEM","CAPDELAY",0,".\\config.ini");
SetTimer(IDC_TIME_CAPTURE,100,0);
pcsDlg=new CDlgConfigSet();
pcsDlg->Create(IDD_DIALOG_CONFIG_SET,this);
CRect rect;
GetDlgItem(IDC_SMALLIMAGE)->GetWindowRect(rect);
ScreenToClient(&rect);
pcsDlg->SetWindowPos(NULL,rect.left-10,rect.top-10,rect.Width()-10,rect.Height()-10,0);
pcsDlg->ShowWindow(SW_SHOWNORMAL);
pcsDlg->UpdateWindow();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -