?? netsdkdemodlg.cpp
字號(hào):
{
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;
//如果處于單幀播放狀態(tài),需先恢復(fù)
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;
//如果處于單幀播放狀態(tài),需先恢復(fù)
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;
}
//對(duì)當(dāng)前監(jiān)視通道進(jìn)行抓圖,對(duì)播放通道是否能抓圖有待驗(yàn)證
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);
}
}
//強(qiáng)制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;
}
//是否保存實(shí)時(shí)數(shù)據(jù)數(shù)據(jù)
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");
}
}
}
}
//用來(lái)打開顯示畫面分割各顯示區(qū)域的信息
void CNetSDKDemoDlg::ShowFluxInfo()
{
CSplitInfoDlg dlg;
m_runtimeMsgPannel.EnableShowFlux(FALSE);
dlg.DoModal();
m_runtimeMsgPannel.EnableShowFlux(TRUE);
}
/*
//刷新畫面分割模式
void CNetSDKDemoDlg::OnSelchangeSplittesel()
{
UpdateScreen();
}
*/
//關(guān)閉監(jiān)視圖像
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) {
//在主頁(yè)面的控制
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: //調(diào)焦
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 : //轉(zhuǎn)至
case PTZ_POINT_SET_CONTROL : //設(shè)置
case PTZ_POINT_DEL_CONTROL : //刪除
case PTZ_POINT_LOOP_CONTROL : //點(diǎn)間輪循
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;
}
/*
//處理點(diǎn)擊到當(dāng)前分割區(qū)域時(shí)的顯示,并確定刷新當(dāng)前顯示畫面
void CNetSDKDemoDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
CRect nRect, subRect;
int nSplit, spWide, spHight, i, j;
//m_mywindows 的客戶區(qū)域位置
GetDlgItem(IDC_MYWINDOW)->GetClientRect(&nRect);
GetDlgItem(IDC_MYWINDOW)->ClientToScreen(&nRect);
ScreenToClient(&nRect);
//當(dāng)不在顯示的區(qū)域時(shí)直接返回
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; //分割畫面類型確定分割行列數(shù)
spWide = nRect.Width()/nSplit;
spHight = nRect.Height()/nSplit;
//確定當(dāng)前畫面序號(hào)和當(dāng)前區(qū)域
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;
//當(dāng)前畫面更新顯示
// 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 的客戶區(qū)域位置
GetDlgItem(IDC_MYWINDOW)->GetClientRect(&nRect);
GetDlgItem(IDC_MYWINDOW)->ClientToScreen(&nRect);
ScreenToClient(&nRect);
//當(dāng)不在顯示的區(qū)域時(shí)直接返回
if(point.x < nRect.left || point.x > nRect.right)
{
return;
}
if(point.y < nRect.
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -