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