remotetimeplay.cpp

来自「监控开发资料,提供二次开发源码和使用说明书」· C++ 代码 · 共 774 行 · 第 1/2 页

CPP
774
字号

void CRemoteTimePlay::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if( (IsInWnd(point)) && (lHandle >= 0) )
	{
		m_bFullScreen=!m_bFullScreen;
		if(m_bFullScreen)
			F_ShowFullScreen();
		else
			F_ShowNormal();
	}
	CDialog::OnLButtonDblClk(nFlags, point);
}

BOOL CRemoteTimePlay::IsInWnd(CPoint point)
{
	CRect rc;
	GetDlgItem(IDC_WND)->GetWindowRect(&rc);
	ScreenToClient(&rc);
	if(PtInRect(&rc,point))
		return TRUE;
	else
		return FALSE;
}

void CRemoteTimePlay::F_ShowFullScreen()
{
	F_EnableFlashWnd(FALSE);

	CRect rc,rcClient;
	::GetWindowRect(m_hPareDlgWnd,m_rcPareDlg);

	::GetWindowRect(m_hPareTabWnd,m_rcPareTab);
	::ScreenToClient(m_hPareDlgWnd,(POINT*)(&m_rcPareTab));
	::ScreenToClient(m_hPareDlgWnd,(POINT*)(&m_rcPareTab)+1);

	::GetWindowRect(m_hWnd,m_rcParent);
	::ScreenToClient(m_hPareTabWnd,(POINT*)(&m_rcParent));
	::ScreenToClient(m_hPareTabWnd,(POINT*)(&m_rcParent)+1);

	
	::SetWindowPos(m_hPareDlgWnd,NULL,m_rcScreen.left-SCREEN_EDGE,m_rcScreen.top-SCREEN_EDGE,m_rcScreen.Width()+2*SCREEN_EDGE,m_rcScreen.Height()+2*SCREEN_EDGE,SWP_SHOWWINDOW);

	::GetClientRect(m_hPareDlgWnd,rc);
	::SetWindowPos(m_hPareTabWnd,NULL,rc.left,rc.top,rc.Width(),rc.Height(),SWP_SHOWWINDOW);

	::GetClientRect(m_hPareTabWnd,rc);
	::SetWindowPos(m_hWnd,NULL,rc.left,rc.top,rc.Width(),rc.Height(),SWP_SHOWWINDOW);
	
	GetDlgItem(IDC_WND)->GetClientRect(rcClient);
	GetDlgItem(IDC_WND)->GetWindowRect(rc);
	int iEdge=(rc.Width()-rcClient.Width())/2;
	rc=m_rcScreen;
	rc.left-=iEdge;
	rc.right+=iEdge;
	rc.top-=iEdge;
	rc.bottom+=iEdge;
	this->ScreenToClient(rc);
	::SetWindowPos(GetDlgItem(IDC_WND)->m_hWnd,NULL,rc.left,rc.top,rc.Width(),rc.Height(),SWP_SHOWWINDOW);
	Invalidate(FALSE);
	UpdateWindow();
}

void CRemoteTimePlay::F_EnableFlashWnd(BOOL bEnable)
{
	if(bEnable)
	{
		//THE same to multiplay
		GetDlgItem(IDC_COMBOSERVER)->ModifyStyle(0,WS_VISIBLE,0);
		GetDlgItem(IDC_COMBOPORT)->ModifyStyle(0,WS_VISIBLE,0);
		GetDlgItem(IDC_DATESTART)->ModifyStyle(0,WS_VISIBLE,0);
		GetDlgItem(IDC_DATESTOP)->ModifyStyle(0,WS_VISIBLE,0);
		GetDlgItem(IDC_TIMESTOP)->ModifyStyle(0,WS_VISIBLE,0);
		GetDlgItem(IDC_TIMESTART)->ModifyStyle(0,WS_VISIBLE,0);
		GetDlgItem(IDC_PLAY_TIME)->ModifyStyle(0,WS_VISIBLE,0);
		GetDlgItem(IDC_STOP)->ModifyStyle(0,WS_VISIBLE,0);
		GetDlgItem(IDC_SLOW)->ModifyStyle(0,WS_VISIBLE,0);
		GetDlgItem(IDC_FAST)->ModifyStyle(0,WS_VISIBLE,0);
		GetDlgItem(IDC_STEP)->ModifyStyle(0,WS_VISIBLE,0);
		GetDlgItem(IDC_STEPBACK)->ModifyStyle(0,WS_VISIBLE,0);
		GetDlgItem(IDC_CAPPIC)->ModifyStyle(0,WS_VISIBLE,0);
		GetDlgItem(IDC_SOUND)->ModifyStyle(0,WS_VISIBLE,0);
		GetDlgItem(IDC_VOLUME_SLIDER)->ModifyStyle(0,WS_VISIBLE,0);
	}
	else
	{
		//THE same to multiplay
		GetDlgItem(IDC_COMBOSERVER)->ModifyStyle(WS_VISIBLE,0,0);
		GetDlgItem(IDC_COMBOPORT)->ModifyStyle(WS_VISIBLE,0,0);
		GetDlgItem(IDC_DATESTART)->ModifyStyle(WS_VISIBLE,0,0);
		GetDlgItem(IDC_DATESTOP)->ModifyStyle(WS_VISIBLE,0,0);
		GetDlgItem(IDC_TIMESTOP)->ModifyStyle(WS_VISIBLE,0,0);
		GetDlgItem(IDC_TIMESTART)->ModifyStyle(WS_VISIBLE,0,0);
		GetDlgItem(IDC_PLAY_TIME)->ModifyStyle(WS_VISIBLE,0,0);
		GetDlgItem(IDC_STOP)->ModifyStyle(WS_VISIBLE,0,0);
		GetDlgItem(IDC_SLOW)->ModifyStyle(WS_VISIBLE,0,0);
		GetDlgItem(IDC_FAST)->ModifyStyle(WS_VISIBLE,0,0);
		GetDlgItem(IDC_STEP)->ModifyStyle(WS_VISIBLE,0,0);
		GetDlgItem(IDC_STEPBACK)->ModifyStyle(WS_VISIBLE,0,0);
		GetDlgItem(IDC_CAPPIC)->ModifyStyle(WS_VISIBLE,0,0);
		GetDlgItem(IDC_SOUND)->ModifyStyle(WS_VISIBLE,0,0);
		GetDlgItem(IDC_VOLUME_SLIDER)->ModifyStyle(WS_VISIBLE,0,0);
	}
}

void CRemoteTimePlay::F_InitUI()
{
	CButton *pButton;
	
	pButton = (CButton *)GetDlgItem(IDC_PLAY_TIME);
	pButton->SetIcon(m_hPlayEnableIcon);
	pButton->EnableWindow(TRUE);
	
	pButton = (CButton *)GetDlgItem(IDC_STOP);
	pButton->SetIcon(m_hStopDisableIcon);
	pButton->EnableWindow(FALSE);
	
	pButton = (CButton *)GetDlgItem(IDC_FAST);
	pButton->SetIcon(m_hFastDisableIcon);
	pButton->EnableWindow(FALSE);
	
	pButton = (CButton *)GetDlgItem(IDC_SLOW);
	pButton->SetIcon(m_hSlowDisableIcon);
	pButton->EnableWindow(FALSE);
	
	pButton = (CButton *)GetDlgItem(IDC_STEP);
	pButton->SetIcon(m_hStepDisableIcon);
	pButton->EnableWindow(FALSE);
	
	pButton = (CButton *)GetDlgItem(IDC_STEPBACK);
	pButton->SetIcon(m_hStepBackDisableIcon);
	pButton->EnableWindow(FALSE);
	
	pButton = (CButton *)GetDlgItem(IDC_CAPPIC);
	pButton->SetIcon(m_hCaptureIcon);
	pButton->EnableWindow(FALSE);
	
	pButton = (CButton *)GetDlgItem(IDC_SOUND);
	pButton->SetIcon(m_hSoundStopIcon);
	pButton->EnableWindow(FALSE);
}

void CRemoteTimePlay::F_SetPlayState()
{
	m_ctlVolume.EnableWindow(TRUE);
	
	CButton *pButton;
	
	pButton = (CButton *)GetDlgItem(IDC_PLAY_TIME);
	pButton->SetIcon(m_hPauseEnableIcon);
	pButton->EnableWindow(TRUE);
	
	pButton = (CButton *)GetDlgItem(IDC_STOP);
	pButton->SetIcon(m_hStopEnableIcon);
	pButton->EnableWindow(TRUE);
	
	pButton = (CButton *)GetDlgItem(IDC_FAST);
	pButton->SetIcon(m_hFastEnableIcon);
	pButton->EnableWindow(TRUE);
	
	pButton = (CButton *)GetDlgItem(IDC_SLOW);
	pButton->SetIcon(m_hSlowEnableIcon);
	pButton->EnableWindow(TRUE);
	
	pButton = (CButton *)GetDlgItem(IDC_CAPPIC);
	pButton->SetIcon(m_hCaptureIcon);
	pButton->EnableWindow(TRUE);
	
	pButton = (CButton *)GetDlgItem(IDC_SOUND);
	if(m_bSound)
		pButton->SetIcon(m_hSoundStartIcon);
	else
		pButton->SetIcon(m_hSoundStopIcon);
	pButton->EnableWindow(TRUE);
	
	pButton = (CButton *)GetDlgItem(IDC_STEP);
	pButton->SetIcon(m_hStepEnableIcon);
	pButton->EnableWindow(TRUE);
	
	pButton = (CButton *)GetDlgItem(IDC_STEPBACK);
	pButton->SetIcon(m_hStepBackEnableIcon);
	pButton->EnableWindow(TRUE);
}

void CRemoteTimePlay::OnCancel() 
{
	// TODO: Add extra cleanup here
	
//	CDialog::OnCancel();
}

void CRemoteTimePlay::OnSelchangeComboserver() 
{
	// TODO: Add your control notification handler code here
	int iSelServer = m_ServerName.GetCurSel() - 1;
	if(iSelServer < 0)
		return;
	ServerID = serverinfo[iSelServer].m_lServerID;
	m_lStartChan = serverinfo[iSelServer].m_lStartChannel;
	int m_iChanNum = serverinfo[iSelServer].m_iServerChannelNumber;
	m_ChannelName.ResetContent();
	CString sTemp;
	for(int i=0; i<m_iChanNum; i++)
	{
		sTemp.Format("%d", i+m_lStartChan);
		m_ChannelName.AddString(sTemp);
	}
	iChannel = 0;
	m_ChannelName.SetCurSel(iChannel);
}

void CRemoteTimePlay::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	DWORD nPos;
	if(nIDEvent == PLAYBYTIME_TIMER)
	{
		if(lHandle >= 0)
		{
			NET_DVR_PlayBackControl(lHandle, NET_DVR_PLAYGETPOS, 0, &nPos);
			if(nPos > 100)		//由于网络原因或DVR忙,回放或下载异常终止
			{
				F_StopPlay();
				AfxMessageBox("由于网络原因或DVR忙,回放异常终止!");
			}
			if(nPos == 100)
			{				
				F_StopPlay();
				AfxMessageBox("按时间回放结束!");
			}		
		}
		
	}
	else if(nIDEvent == DOWNBYTIME_TIMER)
	{
		if(m_bDown)
		{
			NET_DVR_PlayBackControl(m_lLoadHandle, NET_DVR_PLAYGETPOS, 0, &nPos);
			if(nPos > 100)		//由于网络原因或DVR忙,回放或下载异常终止
			{
				m_bDown=FALSE;				
				NET_DVR_StopGetFile(m_lLoadHandle);				
				GetDlgItem(IDC_BUTTONDOWNLOAD)->SetWindowText("下载");
				AfxMessageBox("由于网络原因或DVR忙,下载异常终止!");
			}
			if(nPos == 100)
			{
				m_bDown=FALSE;				
				NET_DVR_StopGetFile(m_lLoadHandle);
				GetDlgItem(IDC_BUTTONDOWNLOAD)->SetWindowText("下载");
				AfxMessageBox("按时间下载结束!");
			}		
		}	
	}	
	CDialog::OnTimer(nIDEvent);
}

void CRemoteTimePlay::OnButtondownload() 
{
	// TODO: Add your control notification handler code here
	CString csFileName;
	CString csStartTime, csStopTime;
	CString csTemp,csDir;
	char nFileName[256];
	
	UpdateData(TRUE);
	if(!m_bDown)
	{
		if(m_ServerName.GetCurSel() == 0)
		{
			AfxMessageBox("请选择DVR!");
			return;
		}
		int iSelServer = m_ServerName.GetCurSel() - 1;
		iChannel = m_ChannelName.GetCurSel()+m_lStartChan;
	
		csStartTime.Format("%04d%02d%02d%02d%02d%02d",m_ctDateStart.GetYear(),m_ctDateStart.GetMonth(), m_ctDateStart.GetDay(), m_ctTimeStart.GetHour(), m_ctTimeStart.GetMinute(), m_ctTimeStart.GetSecond());
		csStopTime.Format("%04d%02d%02d%02d%02d%02d",m_ctDateStop.GetYear(),m_ctDateStop.GetMonth(), m_ctDateStop.GetDay(), m_ctTimeStop.GetHour(), m_ctTimeStop.GetMinute(), m_ctTimeStop.GetSecond());
		
		csDir.Format("%s\\",hikClientParam.m_csDownLoadPath);
		sprintf(nFileName,"%s%s_%02d_D%s_%sTime.mp4",csDir,serverinfo[iSelServer].m_csServerIP, iChannel,csStartTime,csStopTime);
		TRACE("Download file name: %s \n", nFileName);
		NET_DVR_TIME StartTime,StopTime;
		UpdateData(TRUE);
		
		StartTime.dwYear = m_ctDateStart.GetYear();
		StartTime.dwMonth = m_ctDateStart.GetMonth();
		StartTime.dwDay = m_ctDateStart.GetDay();
		StartTime.dwHour = m_ctTimeStart.GetHour();
		StartTime.dwMinute = m_ctTimeStart.GetMinute();
		StartTime.dwSecond = m_ctTimeStart.GetSecond();
		StopTime.dwYear = m_ctDateStop.GetYear();
		StopTime.dwMonth = m_ctDateStop.GetMonth();
		StopTime.dwDay = m_ctDateStop.GetDay();
		StopTime.dwHour = m_ctTimeStop.GetHour();
		StopTime.dwMinute = m_ctTimeStop.GetMinute();
		StopTime.dwSecond = m_ctTimeStop.GetSecond();

		m_lLoadHandle = NET_DVR_GetFileByTime(ServerID,iChannel, &StartTime, &StopTime, nFileName);
		if(m_lLoadHandle >= 0)
		{
			NET_DVR_PlayBackControl(m_lLoadHandle, NET_DVR_PLAYSTART, 0, NULL);
			GetDlgItem(IDC_BUTTONDOWNLOAD)->SetWindowText("停止下载");
			m_bDown=TRUE;
			SetTimer(DOWNBYTIME_TIMER,1000,NULL);
		}
		else
		{
			AfxMessageBox("按时间下载失败!");
			CString sTemp;
			sTemp.Format("ERROR: NET_DVR_GetFileByTime = %d",NET_DVR_GetLastError());
			TRACE(sTemp);
			return;
		}
	}
	else 
	{
		NET_DVR_StopGetFile(m_lLoadHandle);
		m_bDown=FALSE;
		GetDlgItem(IDC_BUTTONDOWNLOAD)->SetWindowText("下载");
		KillTimer(DOWNBYTIME_TIMER);
		Invalidate(TRUE);
	}
	UpdateData(FALSE);
}


void CRemoteTimePlay::OnButtonloadsave() 
{
	// TODO: Add your control notification handler code here
	if(!m_bTimeSave)
	{
		if(NET_DVR_PlayBackSaveData(lHandle, "c:\\SavefileByTime.mp4"))
		{
			m_bTimeSave = TRUE;
			GetDlgItem(IDC_BUTTONLOADSAVE)->SetWindowText("停止保存");
		}
	}
	else
	{
		NET_DVR_StopPlayBackSave(lHandle);
		m_bTimeSave = FALSE;
		GetDlgItem(IDC_BUTTONLOADSAVE)->SetWindowText("保存");
	}
}

void CRemoteTimePlay::OnButplay() 
{
	// TODO: Add your control notification handler code here
	NET_DVR_TIME StartTime,StopTime;
	UpdateData(TRUE);

	if(m_ServerName.GetCurSel() == 0)
	{
		AfxMessageBox("请选择DVR!");
		return;
	}
		
	iChannel = m_ChannelName.GetCurSel()+m_lStartChan;
	StartTime.dwYear = m_ctDateStart.GetYear();
	StartTime.dwMonth = m_ctDateStart.GetMonth();
	StartTime.dwDay = m_ctDateStart.GetDay();
	StartTime.dwHour = m_ctTimeStart.GetHour();
	StartTime.dwMinute = m_ctTimeStart.GetMinute();
	StartTime.dwSecond = m_ctTimeStart.GetSecond();
	StopTime.dwYear = m_ctDateStop.GetYear();
	StopTime.dwMonth = m_ctDateStop.GetMonth();
	StopTime.dwDay = m_ctDateStop.GetDay();
	StopTime.dwHour = m_ctTimeStop.GetHour();
	StopTime.dwMinute = m_ctTimeStop.GetMinute();
	StopTime.dwSecond = m_ctTimeStop.GetSecond();
//	if(NET_DVR_PlayBackByTimeLocDisplay(ServerID, iChannel, &StartTime, &StopTime))
	{
		TRACE("远程控制本地回放成功!");
	}
}

void CRemoteTimePlay::OnButstop() 
{
	// TODO: Add your control notification handler code here
//	if(NET_DVR_StopLocDisplayPlay(ServerID))
	{
		TRACE("停止远程控制本地回放成功!");
	}
}

⌨️ 快捷键说明

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