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

📄 netsdkdemodlg.cpp

📁 它是一个可以实时交互的嵌入式软件系统
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		{
			LastError();
			MessageBox(MSG_DEMODLG_PLAYCTRLFAILED);
		}
		else
		{
			if(pParam->iStatus == STATUS_PAUSE)
			{
				pParam->iStatus = STATUS_PLAY;
			}
			else
			{
				pParam->iStatus = STATUS_PAUSE;
			}
		}
	}
	else if(siNode.Type == SPLIT_TYPE_PBBYTIME)
	{
		SplitPBByTimeParam *pbParam = (SplitPBByTimeParam *)siNode.Param;
		if(pbParam->iStatus == STATUS_STEP)
		{
			ret = CLIENT_StepPlayBack(siNode.iHandle, TRUE);
			if (!ret)
			{
				LastError();
				goto out;
			}
			pbParam->iStatus = STATUS_STOP;
		}

		if(pbParam->iStatus != STATUS_PAUSE)
		{
			isPause = true;	
		}
		
		ret = CLIENT_PausePlayBack(siNode.iHandle, isPause);
		if(!ret)
		{
			LastError();
			MessageBox(MSG_DEMODLG_PLAYCTRLFAILED);
		}	
		else
		{
			if(pbParam->iStatus == STATUS_PAUSE)
			{
				pbParam->iStatus = STATUS_PLAY;
			}
			else
			{
				pbParam->iStatus = STATUS_PAUSE;
			}
		}
	}
	else
	{
		MessageBox(MSG_DEMODLG_NOTPLAYING);
	}

out:
	return ret;
}

int CNetSDKDemoDlg::PlayStop(int iScreen, BOOL bDis)
{
	SplitInfoNode siNode;
	memset(&siNode, 0, sizeof(siNode));
	BOOL ret = GetSplitInfo_Main(iScreen, &siNode);
	if (!ret)
	{
		MessageBox("error while getting split info");
		goto e_clear;
	}

	CPlayWnd *plWnd;
	if(siNode.Type == SPLIT_TYPE_NETPLAY)
	{
		SplitNetPlayParam *pParam = (SplitNetPlayParam *)siNode.Param;
		//如果处于单帧播放状态,需先恢复
		if(pParam->iStatus == STATUS_STEP)
		{
			ret = CLIENT_StepPlayBack(siNode.iHandle, TRUE);
			if (!ret)
			{
				LastError();
				goto e_clear;
			}
		}
		m_playctrlPannel.StopPlay();
		ret = CLIENT_StopPlayBack(siNode.iHandle);
		if (!ret)
		{
			LastError();
			if (!bDis)
			{
				MessageBox(MSG_DEMODLG_STOPPLAYFAILED);
				goto e_clear;
			}
		}
		FileInfoNode *pFile = ((SplitNetPlayParam *)siNode.Param)->pFileInfo;
		delete pFile;
		delete (SplitNetPlayParam *)siNode.Param;
		siNode.Param = NULL;
		siNode.Type = SPLIT_TYPE_NULL;
		ret = SetSplitInfo_Main(iScreen, &siNode);
		if (!ret)
		{
			MessageBox("error while setting split info");
		}

		if (m_curSoundSplit == iScreen)
		{
			//m_advanceBtnPannel.SetCheckSound(0);
			m_curSoundSplit = -1;
		}
	}
	else if (siNode.Type == SPLIT_TYPE_PBBYTIME)
	{
		SplitPBByTimeParam *pbParam = (SplitPBByTimeParam *)siNode.Param;
		//如果处于单帧播放状态,需先恢复
		if(pbParam->iStatus == STATUS_STEP)
		{
			ret = CLIENT_StepPlayBack(siNode.iHandle, TRUE);
			if (!ret)
			{
				LastError();
				goto e_clear;
			}
		}
		m_playctrlPannel.StopPlay();
		ret = CLIENT_StopPlayBack(siNode.iHandle);
		if (!ret)
		{
			LastError();
			if (!bDis)
			{
				MessageBox(MSG_DEMODLG_STOPPLAYFAILED);
				goto e_clear;
			}
		}
		delete (SplitPBByTimeParam *)siNode.Param;
		//add by zhaojs 2006-12-06
		siNode.Param = NULL;
		siNode.Type = SPLIT_TYPE_NULL;
		ret = SetSplitInfo_Main(iScreen, &siNode);
		if (!ret)
		{
			MessageBox("error while setting split info");
		}

		if (m_curSoundSplit == iScreen)
		{
			//m_advanceBtnPannel.SetCheckSound(0);
			m_curSoundSplit = -1;
		}
	}
	else
	{
		MessageBox(MSG_DEMODLG_NOTPLAYING);
		goto e_clear;
	}

	// repaint the play window
	plWnd = (CPlayWnd *)m_screenPannel.GetPage(iScreen);
	if (plWnd)
	{
		plWnd->PostMessage(VIDEO_REPAINT);
	}

	return 0;
e_clear:
	return -1;
}

//对当前监视通道进行抓图,对播放通道是否能抓图有待验证
void CNetSDKDemoDlg::CaptureScreen() 
{
	SplitInfoNode siNode;
	memset(&siNode, 0, sizeof(siNode));
	BOOL ret = GetSplitInfo_Main(m_curScreen, &siNode);
	if (!ret)
	{
		MessageBox("error while getting split info");
		return;
	}

	CString strName = "pct.bmp";
	
	//支持多种图像的抓图
	if(siNode.Type == SPLIT_TYPE_NULL)
	{
		MessageBox(MSG_DEMODLG_CANTCAPTURE);
		return;
	}

	//抓图保存文件名的输入
	CFileDialog dlg(FALSE,"*.bmp","pct.bmp",OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY,
		"All File(*.bmp)|*.*||",this);

	if(dlg.DoModal() == IDOK)
	{
		strName = dlg.GetPathName();		
	}

	ret = CLIENT_CapturePicture(siNode.iHandle, strName.GetBuffer(0));
	if(!ret)
	{
		LastError();
		MessageBox(MSG_DEMODLG_CAPTUREFAILED);
	}
}

//强制I帧
void CNetSDKDemoDlg::SetIframe() 
{
	SplitInfoNode siNode;
	memset(&siNode, 0, sizeof(siNode));
	BOOL ret = GetSplitInfo_Main(m_curScreen, &siNode);
	if (!ret)
	{
		MessageBox("error while getting split info");
		return;
	}

	if(siNode.Type != SPLIT_TYPE_MONITOR)
	{
		MessageBox(MSG_DEMODLG_CANTFORCE_I);
		return;
	}
	
	SplitMonitorParam *mParam = (SplitMonitorParam *)siNode.Param;

	ret = CLIENT_MakeKeyFrame(mParam->pDevice->LoginID, mParam->iChannel);
	if(!ret)
	{
		LastError();
		MessageBox(MSG_DEMODLG_FAILEDFORCE_I);
	}
}

//是否打开声音
BOOL CNetSDKDemoDlg::OpenSound(BOOL bOpen) 
{
	SplitInfoNode siNode;
	memset(&siNode, 0, sizeof(siNode));
	BOOL ret = GetSplitInfo_Main(m_curScreen, &siNode);
	if (!ret)
	{
		MessageBox("error while getting split info");
		return FALSE;
	}

	if(bOpen)
	{
		if (m_curSoundSplit >= 0 && 
			(siNode.Type == SPLIT_TYPE_MONITOR || 
			siNode.Type == SPLIT_TYPE_NETPLAY || 
			siNode.Type == SPLIT_TYPE_PBBYTIME))
		{
			if (FALSE == CLIENT_CloseSound())
			{
				LastError();
				MessageBox(MSG_CLOSESOUNDFAILED);
				return FALSE;
			}
		}
		m_curSoundSplit = m_curScreen;
		if (siNode.Type == SPLIT_TYPE_MONITOR || 
			siNode.Type == SPLIT_TYPE_NETPLAY ||
			siNode.Type == SPLIT_TYPE_PBBYTIME)
		{
			if (FALSE == CLIENT_OpenSound(siNode.iHandle))
			{
				LastError();
				MessageBox(MSG_OPENSOUNDFAILED);
				return FALSE;
			}
		}
	}
	else
	{
		if (siNode.Type == SPLIT_TYPE_MONITOR || 
			siNode.Type == SPLIT_TYPE_NETPLAY ||
			siNode.Type == SPLIT_TYPE_PBBYTIME)
		{
			if (FALSE == CLIENT_CloseSound())
			{
				LastError();
				MessageBox(MSG_CLOSESOUNDFAILED);
				return FALSE;
			}
		}
		m_curSoundSplit = -1;
	}
	
	return TRUE;
}

//是否保存实时数据数据
void CNetSDKDemoDlg::SaveRealdata(int nCheck) 
{
	SplitInfoNode siNode;
	memset(&siNode, 0, sizeof(siNode));
	BOOL ret = GetSplitInfo_Main(m_curScreen, &siNode);
	if (!ret)
	{
		MessageBox("error while getting split info");
		return;
	}

	CString strName = "save.dav";
	if(nCheck > 0)
	{
		siNode.isSaveData = 1;
		if (siNode.Type == SPLIT_TYPE_MONITOR || siNode.Type == SPLIT_TYPE_MULTIPLAY)
		{
			//文件名的输入
			CFileDialog dlg(FALSE,"*.dav","save.dav",OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY,
			"All File(*.dav)|*.*||",this);
			if(dlg.DoModal() == IDOK)
			{
				strName = dlg.GetPathName();		
			}
			else
			{
				return;
			}
			BOOL ret = CLIENT_SaveRealData(siNode.iHandle, strName.GetBuffer(0));
			if(!ret)
			{
				LastError();
				MessageBox (MSG_DEMODLG_SAVEDATAFAILED);
			}
		}
	}
	else
	{
		siNode.isSaveData = 0;
		if(siNode.Type == SPLIT_TYPE_MONITOR || siNode.Type == SPLIT_TYPE_MULTIPLAY)
		{
			BOOL stop = CLIENT_StopSaveRealData(siNode.iHandle);
			if (stop)
			{
				MessageBox(MSG_DEMODLG_REALSAVE_STOPPED);
			}
			else
			{
				LastError();
				MessageBox("stop save file failed");
			}
		}
	}
}

//用来打开显示画面分割各显示区域的信息
void CNetSDKDemoDlg::ShowFluxInfo() 
{
	
	CSplitInfoDlg dlg;
	m_runtimeMsgPannel.EnableShowFlux(FALSE);
	dlg.DoModal();
	m_runtimeMsgPannel.EnableShowFlux(TRUE);
}

/*
//刷新画面分割模式
void CNetSDKDemoDlg::OnSelchangeSplittesel() 
{
	UpdateScreen();
}
*/

//关闭监视图像
void CNetSDKDemoDlg::CloseScreen() 
{
	BOOL ret = ProcessCloseScreen(m_curScreen);

	//m_playWnd[m_curScreen].ShowWindow(SW_HIDE);
	//m_playWnd[m_curScreen].ShowWindow(SW_NORMAL);
	UpdateCurScreenInfo();
}


void CNetSDKDemoDlg::PtzControl(int type, BOOL stop)
{
	BOOL ret;
	DWORD nData ;
	SplitMonitorParam *nParam ;
	BOOL upRet;
	
	LONG lHandle;
	int iChannel;

	if (stop) 
	{
		if (!m_bPTZCtrl)
		{
			goto exitPTZCtrl;
		}
	}

	switch(type) {
	//在主页面的控制
	case PTZ_UP_CONTROL  :    //上           
	case PTZ_DOWN_CONTROL:		//下
	case PTZ_LEFT_CONTROL:	//左
	case PTZ_RIGHT_CONTROL:		//右
	case PTZ_ZOOM_ADD_CONTROL:		//变倍
	case PTZ_ZOOM_DEC_CONTROL:		
	case PTZ_FOCUS_ADD_CONTROL:	//调焦
	case PTZ_FOCUS_DEC_CONTROL:	
	case PTZ_APERTURE_ADD_CONTROL:	//光圈
	case PTZ_APERTURE_DEC_CONTROL:
	case EXTPTZ_LEFTTOP :
	case EXTPTZ_RIGHTTOP :
	case EXTPTZ_LEFTDOWN :
	case EXTPTZ_RIGHTDOWN:
		upRet = UpdateData(true);
		if (!upRet) 
		{
			goto exitPTZCtrl;
		}
		nData = m_ptz_data;
		break;
	case PTZ_POINT_MOVE_CONTROL  :   //转至
	case PTZ_POINT_SET_CONTROL   :   //设置
	case PTZ_POINT_DEL_CONTROL   :   //删除
	case PTZ_POINT_LOOP_CONTROL :   //点间轮循
	case PTZ_LAMP_CONTROL:            //灯
	default:
		MessageBox(MSG_DEMODLG_PTZCMDFAILED);
		goto exitPTZCtrl;
	}

	SplitInfoNode siNode;
	memset(&siNode, 0, sizeof(siNode));

	ret = GetSplitInfo_Main(m_curScreen, &siNode);
	if (!ret)
	{
		MessageBox("error while getting split info");
		return;
	}

	if(siNode.Type != SPLIT_TYPE_MONITOR)
	{
		goto exitPTZCtrl;
	}
	nParam = (SplitMonitorParam *)siNode.Param;
	lHandle = nParam->pDevice->LoginID;
	iChannel = nParam->iChannel;
	if(type >= EXTPTZ_LEFTTOP)
	{
		ret = CLIENT_DHPTZControl(lHandle,iChannel, type, (BYTE)nData, (BYTE)nData,0, stop);
		if (!ret)
		{
			LastError();
		}
		m_bPTZCtrl = !stop;
	}
	else
	{
//		ret = CLIENT_DHPTZControl(iHandle,iChannel, type, 0, (BYTE)nData,0, stop);
		ret = CLIENT_PTZControl(lHandle,iChannel, type, nData, stop);
		if (!ret)
		{
			LastError();
		}
		m_bPTZCtrl = !stop;
	}
	if(!ret)
	{
		MessageBox(MSG_DEMODLG_PTZCTRLFAILED);
		goto exitPTZCtrl;
	}

	return;

exitPTZCtrl:
	m_bPTZCtrl = FALSE;
	return;
}

/*
//处理点击到当前分割区域时的显示,并确定刷新当前显示画面
void CNetSDKDemoDlg::OnLButtonDown(UINT nFlags, CPoint point) 
{
	CRect nRect, subRect;
	int nSplit, spWide, spHight, i, j;

	//m_mywindows 的客户区域位置
	GetDlgItem(IDC_MYWINDOW)->GetClientRect(&nRect);
	GetDlgItem(IDC_MYWINDOW)->ClientToScreen(&nRect);
	ScreenToClient(&nRect);

	//当不在显示的区域时直接返回
	if(point.x < nRect.left || point.x > nRect.right)
	{
		return;		
	}
	if(point.y < nRect.top || point.y > nRect.bottom)
	{
		return;
	}

	nSplit = m_splittesel.GetCurSel() + 1;     //分割画面类型确定分割行列数
	
	spWide = nRect.Width()/nSplit;
	spHight = nRect.Height()/nSplit;

	//确定当前画面序号和当前区域
	j = (point.x - nRect.left)/spWide;
	i = (point.y - nRect.top)/spHight;

	m_curScreen = i * nSplit + j + GetCurSplitStart(m_curScreen, nSplit);   

	subRect.left = nRect.left + j * spWide;
	subRect.top = nRect.top + i * spHight;
	
	subRect.right = subRect.left + spWide;
	subRect.bottom = subRect.top + spHight;

	//当前画面更新显示
//	GetDlgItem(IDC_CURWIN)->ShowWindow(SW_HIDE);
//	GetDlgItem(IDC_CURWIN)->MoveWindow(&subRect,false);
//	GetDlgItem(IDC_CURWIN)->ShowWindow(SW_NORMAL);

	UpdateCurScreenInfo();
}
*/

/*
//双击切换到单画面
void CNetSDKDemoDlg::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
	CRect nRect, subRect;
	int nSplit, spWide, spHight, i, j;
	
	if(m_splittesel.GetCurSel() == SPLIT1)
	{
		m_splittesel.SetCurSel(m_previousSplit);
		UpdataScreen();
		return;
	}
	//m_mywindows 的客户区域位置
	GetDlgItem(IDC_MYWINDOW)->GetClientRect(&nRect);
	GetDlgItem(IDC_MYWINDOW)->ClientToScreen(&nRect);
	ScreenToClient(&nRect);

	//当不在显示的区域时直接返回
	if(point.x < nRect.left || point.x > nRect.right)
	{
		return;
	}
	if(point.y < nRect.

⌨️ 快捷键说明

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