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

📄 videocaptureview.cpp

📁 电子监控的网络编程实例
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// 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 + -