RemoteFilePlay.cpp 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248
  1. // RemoteFilePlay.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "StoneU_HC_OCX.h"
  5. #include "RemoteFilePlay.h"
  6. #include "newclientDlg.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CRemoteFilePlay dialog
  14. extern SERVER_INFO serverinfo[MAXIPNUMBER];
  15. extern CLIENTPARAM ClientParam;
  16. BOOL g_bRmtCapPic = FALSE;
  17. CRemoteFilePlay * RFile;
  18. HANDLE hFile;
  19. int nTemp = 0;
  20. extern CNewclientDlg *g_NewClientDlg;
  21. void CALLBACK PlayDataCallBack(LONG lPlayHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,DWORD dwUser)
  22. {
  23. //TRACE("lPlayHandle = %d dwUser = %d dwDataType = %d dwBufSize = %d", lPlayHandle, dwUser, dwDataType, dwBufSize);
  24. }
  25. //////////////////////////////////////////
  26. UINT GetFileThread(LPVOID pParam)
  27. {
  28. LONG bRet = -1;
  29. NET_DVR_FIND_DATA strFileInfo;
  30. CString tempstring;
  31. //int ntemp,ntemp1;
  32. char tempfile[100];
  33. while(1)
  34. {
  35. bRet = NET_DVR_FindNextFile(RFile->m_lFileHandle, &strFileInfo);
  36. if(bRet == NET_DVR_FILE_SUCCESS)
  37. {
  38. strcpy(tempfile,strFileInfo.sFileName);
  39. RFile->m_Filelist.InsertItem(RFile->m_iFileNum,tempfile,0);
  40. tempstring.Format("%d",strFileInfo.dwFileSize);
  41. RFile->m_Filelist.SetItemText(RFile->m_iFileNum,1,tempstring);
  42. tempstring.Format("%04d%02d%02d%02d%02d%02d",strFileInfo.struStartTime.dwYear, strFileInfo.struStartTime.dwMonth,strFileInfo.struStartTime.dwDay,strFileInfo.struStartTime.dwHour,strFileInfo.struStartTime.dwMinute,strFileInfo.struStartTime.dwSecond);
  43. RFile->m_Filelist.SetItemText(RFile->m_iFileNum,2,tempstring);
  44. tempstring.Format("%04d%02d%02d%02d%02d%02d",strFileInfo.struStopTime.dwYear, strFileInfo.struStopTime.dwMonth,strFileInfo.struStopTime.dwDay,strFileInfo.struStopTime.dwHour,strFileInfo.struStopTime.dwMinute,strFileInfo.struStopTime.dwSecond);
  45. RFile->m_Filelist.SetItemText(RFile->m_iFileNum,3,tempstring);
  46. RFile->m_iFileNum++;
  47. }
  48. else
  49. {
  50. if(bRet == NET_DVR_ISFINDING)
  51. {
  52. Sleep(5);
  53. continue;
  54. }
  55. if( (bRet == NET_DVR_NOMOREFILE) || (bRet == NET_DVR_FILE_NOFIND) )
  56. {
  57. RFile->GetDlgItem(IDC_SEARCHLIST)->SetWindowText("查找"); // by zxy 2005/05/10
  58. RFile->m_bSearchDown = FALSE;
  59. (RFile->GetDlgItem(IDC_STATICSTATE))->ShowWindow(SW_HIDE);
  60. RFile->m_iFileNum = 0;
  61. if(RFile->m_nPlayHandle == -1)
  62. RFile->F_SetStopState();
  63. break;
  64. }
  65. else
  66. {
  67. RFile->GetDlgItem(IDC_SEARCHLIST)->SetWindowText("查找");
  68. RFile->m_bSearchDown = FALSE;
  69. (RFile->GetDlgItem(IDC_STATICSTATE))->ShowWindow(SW_HIDE);
  70. MessageBox(g_NewClientDlg->GetSafeHwnd(),"由于服务器忙,或网络故障,获取文件列表异常终止!", "温馨提示", MB_ICONINFORMATION);
  71. RFile->m_iFileNum = 0;
  72. if(RFile->m_nPlayHandle == -1)
  73. RFile->F_SetStopState();
  74. break;
  75. }
  76. }
  77. }
  78. CloseHandle(RFile->m_hFileThread);
  79. RFile->m_hFileThread = NULL;
  80. NET_DVR_FindClose(RFile->m_lFileHandle);
  81. return 0;
  82. }
  83. CRemoteFilePlay::CRemoteFilePlay(CWnd* pParent /*=NULL*/)
  84. : CDialog(CRemoteFilePlay::IDD, pParent)
  85. {
  86. //{{AFX_DATA_INIT(CRemoteFilePlay)
  87. m_ctDateStart = 0;
  88. m_ctDateStop = 0;
  89. m_ctTimeStart = 0;
  90. m_ctTimeStop = 0;
  91. m_sCardNum = _T("");
  92. m_staticdownload = _T("");
  93. m_bCard = FALSE;
  94. //}}AFX_DATA_INIT
  95. m_hPlayEnableIcon = AfxGetApp()->LoadIcon(IDI_PLAY_ENABLE);
  96. m_hPlayDisableIcon = AfxGetApp()->LoadIcon(IDI_PLAY_DISABLE);
  97. m_hPauseEnableIcon = AfxGetApp()->LoadIcon(IDI_PAUSE_ENABLE);
  98. m_hPauseDisableIcon = AfxGetApp()->LoadIcon(IDI_PAUSE_DISABLE);
  99. m_hStopEnableIcon = AfxGetApp()->LoadIcon(IDI_STOP_ENABLE);
  100. m_hStopDisableIcon = AfxGetApp()->LoadIcon(IDI_STOP_DISABLE);
  101. m_hSoundStartIcon= AfxGetApp()->LoadIcon(IDI_SOUND_ENABLE);
  102. m_hSoundStopIcon= AfxGetApp()->LoadIcon(IDI_SOUND_DISABLE);
  103. m_hGotoHeadDisableIcon = AfxGetApp()->LoadIcon(IDI_GOTOSTART_DISABLE);
  104. m_hGotoTailDisableIcon = AfxGetApp()->LoadIcon(IDI_GOTOEND_DISABLE);
  105. m_hFastDisableIcon = AfxGetApp()->LoadIcon(IDI_FASTFORWARD_DISABLE);
  106. m_hSlowDisableIcon= AfxGetApp()->LoadIcon(IDI_FASTBACKWARD_DISABLE);
  107. m_hGotoHeadEnableIcon = AfxGetApp()->LoadIcon(IDI_GOTOSTART_ENABLE);
  108. m_hGotoTailEnableIcon = AfxGetApp()->LoadIcon(IDI_GOTOEND_ENABLE);
  109. m_hFastEnableIcon = AfxGetApp()->LoadIcon(IDI_FASTFORWARD_ENABLE);
  110. m_hSlowEnableIcon = AfxGetApp()->LoadIcon(IDI_FASTBACKWARD_ENABLE);
  111. m_hStepEnableIcon= AfxGetApp()->LoadIcon(IDI_STEP_ENABLE);
  112. m_hStepDisableIcon = AfxGetApp()->LoadIcon(IDI_STEP_DISABLE);
  113. m_hStepBackEnableIcon = AfxGetApp()->LoadIcon(IDI_STEPBACK_ENABLE);
  114. m_hStepBackDisableIcon = AfxGetApp()->LoadIcon(IDI_STEPBACK_DISABLE);
  115. m_hCaptureIcon = AfxGetApp()->LoadIcon(IDI_PIC);
  116. }
  117. void CRemoteFilePlay::DoDataExchange(CDataExchange* pDX)
  118. {
  119. CDialog::DoDataExchange(pDX);
  120. //{{AFX_DATA_MAP(CRemoteFilePlay)
  121. DDX_Control(pDX, IDC_REMOTEFILRLIST, m_Filelist);
  122. DDX_Control(pDX, IDC_COMBOPORT, m_ChannelCtrl);
  123. DDX_Control(pDX, IDC_PROGRESS_SLIDER, m_ctlProgress);
  124. DDX_Control(pDX, IDC_WND, m_PlayWnd);
  125. DDX_Control(pDX, IDC_DOWNPROGRESS, m_downProgress);
  126. DDX_Control(pDX, IDC_COMBOSERVER, m_ServerCtrl);
  127. DDX_Control(pDX, IDC_COMBOFILETYPE, m_FileType);
  128. DDX_Control(pDX, IDC_VOLUME_SLIDER, m_ctlVolume);
  129. DDX_DateTimeCtrl(pDX, IDC_DATESTART, m_ctDateStart);
  130. DDX_DateTimeCtrl(pDX, IDC_DATESTOP, m_ctDateStop);
  131. DDX_DateTimeCtrl(pDX, IDC_TIMESTART, m_ctTimeStart);
  132. DDX_DateTimeCtrl(pDX, IDC_TIMESTOP, m_ctTimeStop);
  133. DDX_Text(pDX, IDC_CARDNUM, m_sCardNum);
  134. DDX_Text(pDX, IDC_STATICSTATE2, m_staticdownload);
  135. DDX_Check(pDX, IDC_CHKCARD, m_bCard);
  136. //}}AFX_DATA_MAP
  137. }
  138. BEGIN_MESSAGE_MAP(CRemoteFilePlay, CDialog)
  139. //{{AFX_MSG_MAP(CRemoteFilePlay)
  140. ON_NOTIFY(NM_DBLCLK, IDC_REMOTEFILRLIST, OnDblclkRemotefilrlist)
  141. ON_WM_HSCROLL()
  142. ON_WM_LBUTTONDBLCLK()
  143. ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_PROGRESS_SLIDER, OnReleasedcaptureProgressSlider)
  144. ON_WM_TIMER()
  145. ON_BN_CLICKED(IDC_SEARCHLIST, OnSearchlist)
  146. ON_BN_CLICKED(IDC_DOWNLOAD, OnDownload)
  147. ON_BN_CLICKED(IDC_PLAY_FILE, OnPlayFile)
  148. ON_BN_CLICKED(IDC_STOP, OnStop)
  149. ON_BN_CLICKED(IDC_SLOW, OnSlow)
  150. ON_BN_CLICKED(IDC_FAST, OnFast)
  151. ON_BN_CLICKED(IDC_CAPPIC, OnCappic)
  152. ON_BN_CLICKED(IDC_STEP, OnStep)
  153. ON_BN_CLICKED(IDC_SOUND, OnSound)
  154. ON_WM_DESTROY()
  155. ON_CBN_SELCHANGE(IDC_COMBOSERVER, OnSelchangeComboserver)
  156. ON_BN_CLICKED(IDC_BUTTONSAVE, OnButtonsave)
  157. ON_BN_CLICKED(IDC_BUTTONSTOPSAVE, OnButtonstopsave)
  158. ON_BN_CLICKED(IDC_GOTOSTART, OnGotostart)
  159. //}}AFX_MSG_MAP
  160. END_MESSAGE_MAP()
  161. /////////////////////////////////////////////////////////////////////////////
  162. // CRemoteFilePlay message handlers
  163. void CRemoteFilePlay::SetParentWnd(HWND *hhWnd, int iParentNum)
  164. {
  165. VERIFY(iParentNum==2);
  166. m_hPareDlgWnd=hhWnd[0];
  167. m_hPareTabWnd=hhWnd[1];
  168. }
  169. BOOL CRemoteFilePlay::OnInitDialog()
  170. {
  171. CDialog::OnInitDialog();
  172. // TODO: Add extra initialization here
  173. CRect rc(0, 0, 0, 0);
  174. GetParent()->GetClientRect(&rc);
  175. ((CTabCtrl*)GetParent())->AdjustRect(FALSE, &rc);
  176. MoveWindow(&rc);
  177. F_InitUI();
  178. RFile=this;
  179. m_bDown=FALSE;
  180. m_bSearchDown = FALSE;
  181. m_nPlayHandle = -1;
  182. m_bSound=TRUE;
  183. g_bRmtCapPic=FALSE;
  184. m_bPause=FALSE;
  185. m_bSetFrame = FALSE;
  186. bGetMaxTime = FALSE;
  187. m_bFullScreen = FALSE;
  188. m_bSaveFile = FALSE;
  189. m_hPareDlgWnd = NULL;
  190. m_hPareTabWnd = NULL;
  191. m_hPlayWnd = GetDlgItem(IDC_WND)->m_hWnd;
  192. m_ctlVolume.SetRange(0,100);
  193. m_ctlProgress.SetRange(0,100);
  194. m_downProgress.SetRange(0,100);
  195. m_ctlProgress.SetPos(0);
  196. m_downProgress.SetPos(0);
  197. m_ctlVolume.SetPos(50);
  198. m_ServerCtrl.AddString("请选择DVR");
  199. for(int i = 0; i < MAXIPNUMBER; i++)
  200. {
  201. if(serverinfo[i].m_csServerName != "")
  202. m_ServerCtrl.AddString(serverinfo[i].m_csServerName);
  203. }
  204. iFileType = 0;
  205. GetDlgItem(IDC_STATICCARDNUM)->ShowWindow(SW_SHOW);
  206. GetDlgItem(IDC_CARDNUM)->ShowWindow(SW_SHOW);
  207. m_ServerCtrl.SetCurSel(0);
  208. m_ChannelCtrl.SetCurSel(1);
  209. m_FileType.SetCurSel(iFileType);
  210. m_iChannel = 0;
  211. m_Filelist.InsertColumn(0,"文件名称",LVCFMT_LEFT,120,-1);
  212. m_Filelist.InsertColumn(1,"文件大小",LVCFMT_LEFT,70,-1);
  213. m_Filelist.InsertColumn(2,"开始时间",LVCFMT_LEFT,110,-1);
  214. m_Filelist.InsertColumn(3,"结束时间",LVCFMT_LEFT,110,-1);
  215. GetDlgItem(IDC_WND)->GetWindowRect(m_rcWnd);
  216. ScreenToClient(m_rcWnd);
  217. m_hFileThread = NULL;
  218. lFileHandle = -1;
  219. m_iFileNum = 0;
  220. m_nFileTime = 0;
  221. m_nTotalFrames = 0;
  222. m_nTotalSecond = 0;
  223. m_nTotalMinute = 0;
  224. m_nTotalHour = 0;
  225. CTime time1 = CTime::GetCurrentTime();
  226. CTime time(time1.GetYear(),time1.GetMonth(),time1.GetDay(),0,0,0);
  227. CTime time0(time1.GetYear(),time1.GetMonth(),time1.GetDay(),23,59,59);
  228. m_ctDateStart = time;
  229. m_ctTimeStart = time;
  230. m_ctDateStop = time;
  231. m_ctTimeStop = time0;
  232. UpdateData(FALSE);
  233. m_bFindFile = FALSE;
  234. m_bFileDownload = FALSE;
  235. m_lStartChan = 0;
  236. return TRUE; // return TRUE unless you set the focus to a control
  237. // EXCEPTION: OCX Property Pages should return FALSE
  238. }
  239. void CRemoteFilePlay::OnDestroy()
  240. {
  241. KillTimer(DOWNSTATE_TIMER);
  242. CDialog::OnDestroy();
  243. // TODO: Add your message handler code here
  244. }
  245. void CRemoteFilePlay::OnDblclkRemotefilrlist(NMHDR* pNMHDR, LRESULT* pResult)
  246. {
  247. // TODO: Add your control notification handler code here
  248. OnStop();
  249. OnPlayFile();
  250. *pResult = 0;
  251. }
  252. void CRemoteFilePlay::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
  253. {
  254. // TODO: Add your message handler code here and/or call default
  255. char volume = 0;
  256. WORD temp = (0xffff)/100;
  257. WORD volumevalue = 0;
  258. if (GetDlgItem(IDC_VOLUME_SLIDER) == pScrollBar)
  259. {
  260. volume =(char)m_ctlVolume.GetPos();
  261. volumevalue =(WORD) (volume*temp);
  262. if(m_nPlayHandle >= 0)
  263. NET_DVR_PlayBackControl(m_nPlayHandle, NET_DVR_PLAYAUDIOVOLUME, volumevalue, NULL);
  264. }
  265. if (GetDlgItem(IDC_PROGRESS_SLIDER) == pScrollBar)
  266. {
  267. char cpos = (char)(m_ctlProgress.GetPos());
  268. if(m_nPlayHandle >= 0)
  269. {
  270. if ((cpos >=0) && (cpos <=100))
  271. {
  272. if(cpos == 100)
  273. {
  274. //F_StopPlay();
  275. cpos = 99;
  276. }
  277. else
  278. {
  279. NET_DVR_PlayBackControl(m_nPlayHandle,NET_DVR_PLAYSETPOS, cpos, NULL);
  280. }
  281. }
  282. }
  283. }
  284. CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
  285. }
  286. void CRemoteFilePlay::OnLButtonDblClk(UINT nFlags, CPoint point)
  287. {
  288. // TODO: Add your message handler code here and/or call default
  289. if( (IsInWnd(point)) && (m_nPlayHandle>=0) )
  290. {
  291. m_bFullScreen=!m_bFullScreen;
  292. if(m_bFullScreen)
  293. F_ShowFullScreen();
  294. else
  295. F_ShowNormal();
  296. }
  297. CDialog::OnLButtonDblClk(nFlags, point);
  298. }
  299. void CRemoteFilePlay::OnReleasedcaptureProgressSlider(NMHDR* pNMHDR, LRESULT* pResult)
  300. {
  301. // TODO: Add your control notification handler code here
  302. *pResult = 0;
  303. }
  304. void CRemoteFilePlay::OnTimer(UINT nIDEvent)
  305. {
  306. // TODO: Add your message handler code here and/or call default
  307. int nPos;
  308. DWORD nPos1;
  309. DWORD nCurrentTime = 0,nHour = 0,nMinute = 0,nSecond = 0,nCurrentFrame = 0;
  310. DWORD nPlayedFrames = 0;
  311. CString csText;
  312. NET_DVR_TIME OsdTime;
  313. switch(nIDEvent) {
  314. case DOWNSTATE_TIMER:
  315. if(m_bDown)
  316. {
  317. nPos = NET_DVR_GetDownloadPos(lFileHandle);
  318. if(nPos < 0) //失败
  319. {
  320. NET_DVR_StopGetFile(lFileHandle);
  321. m_downProgress.ShowWindow(SW_HIDE);
  322. RFile->GetDlgItem(IDC_DOWNLOAD)->SetWindowText("下载");
  323. RFile->m_bDown=FALSE;
  324. m_staticdownload.Format("停止下载文件%s", filenamedownload);
  325. GetDlgItem(IDC_STATICSTATE2)->ShowWindow(SW_HIDE);
  326. MessageBox("获取下载进度失败!", "温馨提示", MB_ICONINFORMATION);
  327. }
  328. if(nPos == 100) //下载结束
  329. {
  330. NET_DVR_StopGetFile(lFileHandle);
  331. m_downProgress.ShowWindow(SW_HIDE);
  332. RFile->GetDlgItem(IDC_DOWNLOAD)->SetWindowText("下载");
  333. RFile->m_bDown=FALSE;
  334. m_staticdownload.Format("下载文件结束%s", filenamedownload);
  335. GetDlgItem(IDC_STATICSTATE2)->ShowWindow(SW_HIDE);
  336. MessageBox("下载完毕!", "温馨提示", MB_ICONINFORMATION);
  337. }
  338. if(nPos > 100) //由于网络原因或DVR忙,下载异常终止
  339. {
  340. NET_DVR_StopGetFile(lFileHandle);
  341. m_downProgress.ShowWindow(SW_HIDE);
  342. RFile->GetDlgItem(IDC_DOWNLOAD)->SetWindowText("下载");
  343. RFile->m_bDown=FALSE;
  344. m_staticdownload.Format("停止下载文件%s", filenamedownload);
  345. GetDlgItem(IDC_STATICSTATE2)->ShowWindow(SW_HIDE);
  346. MessageBox("由于网络原因或DVR忙,下载异常终止!", "温馨提示", MB_ICONINFORMATION);
  347. }
  348. else
  349. {
  350. m_downProgress.SetPos(nPos);
  351. }
  352. }
  353. break;
  354. case RPSTATE_TIMER:
  355. // nTemp++;
  356. // if (nTemp == 5)
  357. // NET_DVR_PlayBackControl(m_nPlayHandle, NET_DVR_PLAYSETPOS, 80, NULL);
  358. if(!bGetMaxTime)
  359. {
  360. NET_DVR_PlayBackControl(m_nPlayHandle, NET_DVR_GETTOTALTIME, 0, &m_nFileTime);
  361. if(m_nFileTime == 0)
  362. return;
  363. NET_DVR_PlayBackControl(m_nPlayHandle, NET_DVR_GETTOTALFRAMES, 0, &m_nTotalFrames);
  364. if(m_nTotalFrames == 0)
  365. return;
  366. m_nTotalHour=m_nFileTime/3600;
  367. m_nTotalMinute=(m_nFileTime%3600)/60;
  368. m_nTotalSecond=m_nFileTime%60;
  369. bGetMaxTime = TRUE;
  370. }
  371. NET_DVR_PlayBackControl(m_nPlayHandle, NET_DVR_PLAYGETTIME, 0, &nCurrentTime);
  372. if(nCurrentTime >= m_nFileTime)
  373. {
  374. nCurrentTime = m_nFileTime;
  375. }
  376. nHour=(nCurrentTime/3600)%24;
  377. nMinute=(nCurrentTime%3600)/60;
  378. nSecond=nCurrentTime%60;
  379. NET_DVR_PlayBackControl(m_nPlayHandle, NET_DVR_PLAYGETFRAME, 0, &nCurrentFrame);
  380. if(nCurrentFrame>m_nTotalFrames)
  381. nCurrentFrame = m_nTotalFrames;
  382. csText.Format("%d/%d %02d:%02d:%02d/%02d:%02d:%02d %s",nCurrentFrame,m_nTotalFrames,nHour,nMinute,nSecond,m_nTotalHour,m_nTotalMinute,m_nTotalSecond,filename);
  383. GetDlgItem(IDC_PLAYSTATUS)->SetWindowText(csText);
  384. NET_DVR_PlayBackControl(m_nPlayHandle, NET_DVR_PLAYGETPOS, 0, &nPos1);
  385. if(nPos1 > 100) //由于网络原因或DVR忙,回放异常终止
  386. {
  387. F_StopPlay();
  388. MessageBox("由于网络原因或DVR忙,回放异常终止!", "温馨提示", MB_ICONINFORMATION);
  389. }
  390. else
  391. {
  392. m_ctlProgress.SetPos(nPos1);
  393. if(nPos1 == 100)
  394. {
  395. F_StopPlay();
  396. TRACE("回放文件结束!");
  397. }
  398. }
  399. if(NET_DVR_GetPlayBackOsdTime(m_nPlayHandle, &OsdTime))
  400. {
  401. //TRACE("OSDTime: %04d%02d%02d%02d%02d%02d", OsdTime.dwYear, OsdTime.dwMonth,OsdTime.dwDay,OsdTime.dwHour,OsdTime.dwMinute,OsdTime.dwSecond);
  402. }
  403. break;
  404. default:
  405. break;
  406. }
  407. CDialog::OnTimer(nIDEvent);
  408. }
  409. void CRemoteFilePlay::OnSearchlist()
  410. {
  411. // TODO: Add your control notification handler code here
  412. UpdateData(TRUE);
  413. m_Filelist.DeleteAllItems();
  414. iSelServer = m_ServerCtrl.GetCurSel()-1;
  415. if (iSelServer < 0)
  416. {
  417. MessageBox("请选择一个DVR!", "温馨提示", MB_ICONINFORMATION);
  418. return;
  419. }
  420. if(!m_bSearchDown)
  421. {
  422. NET_DVR_TIME StartTime;
  423. NET_DVR_TIME StopTime;
  424. m_iChannel = m_ChannelCtrl.GetCurSel()+m_lStartChan;
  425. iFileType = m_FileType.GetCurSel();
  426. StartTime.dwYear = (WORD)m_ctDateStart.GetYear();
  427. StartTime.dwMonth = (WORD)m_ctDateStart.GetMonth();
  428. StartTime.dwDay = (WORD)m_ctDateStart.GetDay();
  429. StartTime.dwHour = (char)m_ctTimeStart.GetHour();
  430. StartTime.dwMinute = (char)m_ctTimeStart.GetMinute();
  431. StartTime.dwSecond = (char)m_ctTimeStart.GetSecond();
  432. StopTime.dwYear = (WORD)m_ctDateStop.GetYear();
  433. StopTime.dwMonth = (WORD)m_ctDateStop.GetMonth();
  434. StopTime.dwDay = (WORD)m_ctDateStop.GetDay();
  435. StopTime.dwHour = (char)m_ctTimeStop.GetHour();
  436. StopTime.dwMinute = (char)m_ctTimeStop.GetMinute();
  437. StopTime.dwSecond = (char)m_ctTimeStop.GetSecond();
  438. m_lServerType = serverinfo[iSelServer].m_wServerType;
  439. if(m_bCard) //ATM DVR
  440. {
  441. BYTE cTemp[CARDNUM_LEN];
  442. memcpy(cTemp, m_sCardNum, CARDNUM_LEN);
  443. if(iFileType == 0)
  444. {
  445. iFileType = 0xFF;
  446. }
  447. else
  448. {
  449. iFileType -= 1;
  450. }
  451. m_lFileHandle = NET_DVR_FindFileByCard(m_lServerID,m_iChannel,iFileType, TRUE, cTemp, &StartTime, &StopTime);
  452. }
  453. else
  454. {
  455. if(iFileType == 0)
  456. {
  457. iFileType = 0xFF;
  458. }
  459. else
  460. {
  461. iFileType -= 1;
  462. }
  463. m_lFileHandle = NET_DVR_FindFile(m_lServerID,m_iChannel,iFileType, &StartTime, &StopTime);
  464. }
  465. if(m_lFileHandle < 0)
  466. {
  467. MessageBox("获取文件列表失败!", "温馨提示", MB_ICONINFORMATION);
  468. CString sTemp;
  469. sTemp.Format("ERROR: NET_DVR_FindFile = %d",NET_DVR_GetLastError());
  470. TRACE(sTemp);
  471. return;
  472. }
  473. m_Filelist.DeleteAllItems();
  474. m_bFindFile = TRUE;
  475. DWORD dwThreadId;
  476. if(m_hFileThread == NULL)
  477. m_hFileThread = CreateThread(NULL,0,LPTHREAD_START_ROUTINE(GetFileThread),this,0,&dwThreadId);
  478. if(m_hFileThread == NULL)
  479. {
  480. MessageBox("打开线程失败!", "温馨提示", MB_ICONINFORMATION);
  481. return;
  482. }
  483. GetDlgItem(IDC_SEARCHLIST)->SetWindowText("停止查找");
  484. m_bSearchDown = TRUE;
  485. GetDlgItem(IDC_STATICSTATE)->ShowWindow(SW_SHOW);
  486. }
  487. else
  488. {
  489. if(m_hFileThread)
  490. {
  491. TerminateThread(m_hFileThread, 0);
  492. }
  493. CloseHandle(m_hFileThread);
  494. m_hFileThread = NULL;
  495. NET_DVR_FindClose(m_lFileHandle);
  496. GetDlgItem(IDC_SEARCHLIST)->SetWindowText("查找");
  497. m_bSearchDown = FALSE;
  498. GetDlgItem(IDC_STATICSTATE)->ShowWindow(SW_HIDE);
  499. m_iFileNum = 0;
  500. }
  501. }
  502. void CRemoteFilePlay::OnDownload()
  503. {
  504. // TODO: Add your control notification handler code here
  505. CString csFileName;
  506. CString csStartTime, csStopTime;
  507. CString csTemp,csDir;
  508. char nFileName[256];
  509. POSITION pos;
  510. int fileselpos = 0;
  511. // VERIFYINFO strVerifyInfo;
  512. int m_nVerifyret = -1;
  513. UpdateData(TRUE);
  514. if(!m_bDown)
  515. {
  516. pos = m_Filelist.GetFirstSelectedItemPosition();
  517. if(pos == NULL)
  518. {
  519. MessageBox("请选择要下载的文件!", "温馨提示", MB_ICONINFORMATION);
  520. return;
  521. }
  522. fileselpos = m_Filelist.GetNextSelectedItem(pos);
  523. csFileName.Format("%s",m_Filelist.GetItemText(fileselpos,0));
  524. if(csFileName.IsEmpty())
  525. return;
  526. csStartTime.Format("%s",m_Filelist.GetItemText(fileselpos,2));
  527. csStopTime.Format("%s",m_Filelist.GetItemText(fileselpos,3));
  528. sprintf(filenamedownload,"%s",csFileName);
  529. csDir.Format("%s\\",ClientParam.m_csDownLoadPath);
  530. sprintf(nFileName,"%s%s_%02d_D%s_%s.mp4",csDir,serverinfo[iSelServer].m_csServerIP, m_iChannel,csStartTime,csStopTime);
  531. TRACE("Download file name: %s \n", nFileName);
  532. lFileHandle = NET_DVR_GetFileByName(m_lServerID,filenamedownload,nFileName);
  533. if(lFileHandle >= 0)
  534. {
  535. NET_DVR_PlayBackControl(lFileHandle, NET_DVR_PLAYSTART, 0, NULL);
  536. GetDlgItem(IDC_DOWNLOAD)->SetWindowText("停止下载");
  537. m_downProgress.SetPos(0);
  538. m_downProgress.ShowWindow(SW_SHOW);
  539. m_bDown=TRUE;
  540. m_staticdownload.Format("正在下载文件%s", filenamedownload);
  541. GetDlgItem(IDC_STATICSTATE2)->ShowWindow(SW_SHOW);
  542. SetTimer(DOWNSTATE_TIMER,200,NULL);
  543. }
  544. else
  545. {
  546. MessageBox("下载文件失败!", "温馨提示", MB_ICONINFORMATION);
  547. CString sTemp;
  548. sTemp.Format("ERROR: NET_DVR_GetFileByName = %d",NET_DVR_GetLastError());
  549. TRACE(sTemp);
  550. return;
  551. }
  552. }
  553. else
  554. {
  555. NET_DVR_StopGetFile(lFileHandle);
  556. m_bDown=FALSE;
  557. GetDlgItem(IDC_DOWNLOAD)->SetWindowText("下载");
  558. KillTimer(DOWNSTATE_TIMER);
  559. Invalidate(TRUE);
  560. m_downProgress.SetPos(0);
  561. m_downProgress.ShowWindow(SW_HIDE);
  562. m_staticdownload.Format("停止下载文件%s", filenamedownload);
  563. GetDlgItem(IDC_STATICSTATE2)->ShowWindow(SW_HIDE);
  564. }
  565. UpdateData(FALSE);
  566. }
  567. void CRemoteFilePlay::OnPlayFile()
  568. {
  569. // TODO: Add your control notification handler code here
  570. if(m_nPlayHandle == -1)
  571. {
  572. F_Play();
  573. }
  574. else
  575. {
  576. if(m_bPause)
  577. {
  578. if(m_bSetFrame)
  579. {
  580. if(NET_DVR_PlayBackControl(m_nPlayHandle, NET_DVR_PLAYNORMAL, 0, NULL))
  581. {
  582. m_bSetFrame=FALSE;
  583. F_SetPlayState();
  584. }
  585. }
  586. if(NET_DVR_PlayBackControl(m_nPlayHandle, NET_DVR_PLAYRESTART, 0, NULL))
  587. {
  588. m_bPause=FALSE;
  589. F_SetPlayState();
  590. }
  591. }
  592. else
  593. {
  594. if(m_bSetFrame)
  595. {
  596. if(NET_DVR_PlayBackControl(m_nPlayHandle, NET_DVR_PLAYNORMAL, 0, NULL))
  597. {
  598. m_bSetFrame=FALSE;
  599. F_SetPlayState();
  600. }
  601. }
  602. else
  603. {
  604. if(NET_DVR_PlayBackControl(m_nPlayHandle, NET_DVR_PLAYPAUSE, 0, NULL))
  605. {
  606. m_bPause=TRUE;
  607. F_SetPauseState();
  608. }
  609. }
  610. }
  611. }
  612. }
  613. void CRemoteFilePlay::OnStop()
  614. {
  615. // TODO: Add your control notification handler code here
  616. F_StopPlay();
  617. }
  618. void CRemoteFilePlay::OnSlow()
  619. {
  620. // TODO: Add your control notification handler code here
  621. NET_DVR_PlayBackControl(m_nPlayHandle, NET_DVR_PLAYSLOW, 0, NULL);
  622. }
  623. void CRemoteFilePlay::OnFast()
  624. {
  625. // TODO: Add your control notification handler code here
  626. NET_DVR_PlayBackControl(m_nPlayHandle, NET_DVR_PLAYFAST, 0, NULL);
  627. }
  628. void CRemoteFilePlay::OnCappic()
  629. {
  630. // TODO: Add your control notification handler code here
  631. char cFilename[256];
  632. sprintf(cFilename, "%s\\%d_%d.bmp",ClientParam.m_csPictureSavePath,m_iChannel, GetTickCount());
  633. if(NET_DVR_PlayBackCaptureFile(m_nPlayHandle,cFilename))
  634. {
  635. CString sTemp;
  636. sTemp.Format("抓图成功 %s!",cFilename);
  637. MessageBox(sTemp, "温馨提示", MB_ICONINFORMATION);
  638. return;
  639. }
  640. else
  641. {
  642. MessageBox("抓图失败!", "温馨提示", MB_ICONINFORMATION);
  643. }
  644. }
  645. void CRemoteFilePlay::OnStep()
  646. {
  647. // TODO: Add your control notification handler code here
  648. if(NET_DVR_PlayBackControl(m_nPlayHandle, NET_DVR_PLAYFRAME, 0, NULL))
  649. {
  650. CButton *pButton;
  651. pButton = (CButton *)GetDlgItem(IDC_PLAY_FILE);
  652. pButton->SetIcon(m_hPlayEnableIcon);
  653. pButton->EnableWindow(TRUE);
  654. m_bSetFrame = TRUE;
  655. }
  656. }
  657. void CRemoteFilePlay::OnSound()
  658. {
  659. // TODO: Add your control notification handler code here
  660. CButton *pButton;
  661. if(m_bSound)
  662. {
  663. if(NET_DVR_PlayBackControl(m_nPlayHandle, NET_DVR_PLAYSTOPAUDIO, 0, NULL))
  664. {
  665. m_bSound=FALSE;
  666. pButton = (CButton *)GetDlgItem(IDC_SOUND);
  667. pButton->SetIcon(m_hSoundStopIcon);
  668. }
  669. }
  670. else
  671. {
  672. if(NET_DVR_PlayBackControl(m_nPlayHandle, NET_DVR_PLAYSTARTAUDIO, 0, NULL))
  673. {
  674. pButton = (CButton *)GetDlgItem(IDC_SOUND);
  675. pButton->SetIcon(m_hSoundStartIcon);
  676. m_bSound=TRUE;
  677. }
  678. }
  679. }
  680. void CRemoteFilePlay::F_InitUI()
  681. {
  682. // 初始化按钮
  683. CButton *pButton;
  684. m_rcScreen=CRect(0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
  685. //初始化滑动条
  686. pButton = (CButton *)GetDlgItem(IDC_PLAY_FILE);
  687. pButton->SetIcon(m_hPlayDisableIcon);
  688. pButton->EnableWindow(FALSE);
  689. pButton = (CButton *)GetDlgItem(IDC_STOP);
  690. pButton->SetIcon(m_hStopDisableIcon);
  691. pButton->EnableWindow(FALSE);
  692. pButton = (CButton *)GetDlgItem(IDC_FAST);
  693. pButton->SetIcon(m_hFastDisableIcon);
  694. pButton->EnableWindow(FALSE);
  695. pButton = (CButton *)GetDlgItem(IDC_SLOW);
  696. pButton->SetIcon(m_hSlowDisableIcon);
  697. pButton->EnableWindow(FALSE);
  698. pButton = (CButton *)GetDlgItem(IDC_STEP);
  699. pButton->SetIcon(m_hStepDisableIcon);
  700. pButton->EnableWindow(FALSE);
  701. pButton = (CButton *)GetDlgItem(IDC_GOTOSTART);
  702. pButton->SetIcon(m_hGotoHeadDisableIcon);
  703. pButton->EnableWindow(FALSE);
  704. pButton = (CButton *)GetDlgItem(IDC_CAPPIC);
  705. pButton->SetIcon(m_hCaptureIcon);
  706. pButton->EnableWindow(FALSE);
  707. pButton = (CButton *)GetDlgItem(IDC_SOUND);
  708. pButton->SetIcon(m_hSoundStopIcon);
  709. pButton->EnableWindow(FALSE);
  710. }
  711. void CRemoteFilePlay::F_SetStopState()
  712. {
  713. CButton *pButton;
  714. m_ctlProgress.SetPos(0);
  715. m_ctlProgress.EnableWindow(FALSE);
  716. m_ctlVolume.EnableWindow(FALSE);
  717. pButton = (CButton *)GetDlgItem(IDC_PLAY_FILE);
  718. pButton->SetIcon(m_hPlayEnableIcon);
  719. pButton->EnableWindow(TRUE);
  720. pButton = (CButton *)GetDlgItem(IDC_STOP);
  721. pButton->SetIcon(m_hStopDisableIcon);
  722. pButton->EnableWindow(FALSE);
  723. pButton = (CButton *)GetDlgItem(IDC_FAST);
  724. pButton->SetIcon(m_hFastDisableIcon);
  725. pButton->EnableWindow(FALSE);
  726. pButton = (CButton *)GetDlgItem(IDC_SLOW);
  727. pButton->SetIcon(m_hSlowDisableIcon);
  728. pButton->EnableWindow(FALSE);
  729. pButton = (CButton *)GetDlgItem(IDC_STEP);
  730. pButton->SetIcon(m_hStepDisableIcon);
  731. pButton->EnableWindow(FALSE);
  732. pButton = (CButton *)GetDlgItem(IDC_GOTOSTART);
  733. pButton->SetIcon(m_hGotoHeadDisableIcon);
  734. pButton->EnableWindow(FALSE);
  735. pButton = (CButton *)GetDlgItem(IDC_CAPPIC);
  736. pButton->SetIcon(m_hCaptureIcon);
  737. pButton->EnableWindow(FALSE);
  738. pButton = (CButton *)GetDlgItem(IDC_SOUND);
  739. pButton->SetIcon(m_hSoundStopIcon);
  740. pButton->EnableWindow(FALSE);
  741. pButton = (CButton *)GetDlgItem(IDC_STEP);
  742. pButton->SetIcon(m_hStepDisableIcon);
  743. pButton->EnableWindow(FALSE);
  744. }
  745. void CRemoteFilePlay::F_Exit()
  746. {
  747. if(m_hFileThread)
  748. {
  749. TerminateThread(m_hFileThread, 0);
  750. CloseHandle(m_hFileThread);
  751. m_hFileThread = NULL;
  752. NET_DVR_FindClose(m_lFileHandle);
  753. }
  754. //2008-02-25 这里要调用这个函数逐步停止,不能只调用停止解码
  755. F_StopPlay();
  756. Sleep(100);
  757. }
  758. void CRemoteFilePlay::F_Play()
  759. {
  760. UpdateData(TRUE);
  761. int m_nVerifyret = -1;
  762. CString csFileName;
  763. int fileselpos = 0;
  764. HWND PlayhWnd=m_PlayWnd.GetSafeHwnd();
  765. POSITION pos = m_Filelist.GetFirstSelectedItemPosition();
  766. if(pos == NULL)
  767. {
  768. MessageBox("请选择要播放的文件!", "温馨提示", MB_ICONINFORMATION);
  769. return;
  770. }
  771. fileselpos = m_Filelist.GetNextSelectedItem(pos);
  772. csFileName.Format("%s",m_Filelist.GetItemText(fileselpos,0));
  773. if(csFileName.IsEmpty())
  774. return;
  775. TRACE("远程回放文件:%s \n", csFileName);
  776. sprintf(filename,"%s",csFileName);
  777. // remoteplay_info.srcfilename=filename;
  778. if(m_nPlayHandle>=0)
  779. {
  780. NET_DVR_StopPlayBack(m_nPlayHandle);
  781. m_nPlayHandle = -1;
  782. Sleep(400);
  783. }
  784. m_nPlayHandle = NET_DVR_PlayBackByName(m_lServerID, filename, PlayhWnd);
  785. if(m_nPlayHandle == -1)
  786. {
  787. MessageBox("回放失败!", "温馨提示", MB_ICONINFORMATION);
  788. return;
  789. }
  790. NET_DVR_SetPlayDataCallBack(m_nPlayHandle, PlayDataCallBack, m_nPlayHandle);
  791. F_SetPlayState();
  792. NET_DVR_PlayBackControl(m_nPlayHandle, NET_DVR_PLAYSTART, 0, NULL);
  793. if(NET_DVR_PlayBackControl(m_nPlayHandle, NET_DVR_PLAYSTARTAUDIO, 0, NULL))
  794. {
  795. m_bSound=TRUE;
  796. NET_DVR_PlayBackControl(m_nPlayHandle, NET_DVR_PLAYAUDIOVOLUME, (0xffff)/2, NULL);
  797. m_ctlVolume.SetPos(50);
  798. ((CButton *)GetDlgItem(IDC_SOUND))->SetIcon(m_hSoundStartIcon);
  799. }
  800. else
  801. {
  802. m_bSound=FALSE;
  803. ((CButton *)GetDlgItem(IDC_SOUND))->SetIcon(m_hSoundStopIcon);
  804. }
  805. bGetMaxTime = FALSE;
  806. SetTimer(RPSTATE_TIMER, 1000, NULL);
  807. }
  808. void CRemoteFilePlay::F_SetPlayState()
  809. {
  810. m_ctlProgress.EnableWindow(TRUE);
  811. m_ctlVolume.EnableWindow(TRUE);
  812. CButton *pButton;
  813. pButton = (CButton *)GetDlgItem(IDC_PLAY_FILE);
  814. pButton->SetIcon(m_hPauseEnableIcon);
  815. pButton->EnableWindow(TRUE);
  816. pButton = (CButton *)GetDlgItem(IDC_STOP);
  817. pButton->SetIcon(m_hStopEnableIcon);
  818. pButton->EnableWindow(TRUE);
  819. pButton = (CButton *)GetDlgItem(IDC_FAST);
  820. pButton->SetIcon(m_hFastEnableIcon);
  821. pButton->EnableWindow(TRUE);
  822. pButton = (CButton *)GetDlgItem(IDC_SLOW);
  823. pButton->SetIcon(m_hSlowEnableIcon);
  824. pButton->EnableWindow(TRUE);
  825. pButton = (CButton *)GetDlgItem(IDC_CAPPIC);
  826. pButton->SetIcon(m_hCaptureIcon);
  827. pButton->EnableWindow(TRUE);
  828. pButton = (CButton *)GetDlgItem(IDC_SOUND);
  829. if(m_bSound)
  830. pButton->SetIcon(m_hSoundStartIcon);
  831. else
  832. pButton->SetIcon(m_hSoundStopIcon);
  833. pButton->EnableWindow(TRUE);
  834. pButton = (CButton *)GetDlgItem(IDC_STEP);
  835. pButton->SetIcon(m_hStepEnableIcon);
  836. pButton->EnableWindow(TRUE);
  837. pButton = (CButton *)GetDlgItem(IDC_GOTOSTART);
  838. pButton->SetIcon(m_hGotoHeadEnableIcon);
  839. pButton->EnableWindow(TRUE);
  840. }
  841. void CRemoteFilePlay::F_SetPauseState()
  842. {
  843. CButton *pButton;
  844. pButton = (CButton *)GetDlgItem(IDC_PLAY_FILE);
  845. pButton->SetIcon(m_hPlayEnableIcon);
  846. pButton->EnableWindow(TRUE);
  847. }
  848. void CRemoteFilePlay::F_StopPlay()
  849. {
  850. if(m_bFullScreen)
  851. {
  852. m_bFullScreen = FALSE;
  853. F_ShowNormal();
  854. }
  855. if(m_nPlayHandle >= 0)
  856. {
  857. if(m_bSaveFile)
  858. {
  859. NET_DVR_StopPlayBackSave(m_nPlayHandle);
  860. m_bSaveFile = FALSE;
  861. }
  862. NET_DVR_StopPlayBack(m_nPlayHandle);
  863. m_nPlayHandle = -1;
  864. m_ctlProgress.SetPos(0);
  865. CString csText;
  866. KillTimer(RPSTATE_TIMER);
  867. csText.Format("%d/%d %02d:%02d:%02d/%02d:%02d:%02d",0,0,0,0,0,0,0,0);
  868. GetDlgItem(IDC_PLAYSTATUS)->SetWindowText(csText);
  869. //2008-02-25 停止回放时如果打开了声音就要关闭
  870. if (m_bSound)
  871. {
  872. NET_DVR_PlayBackControl(m_nPlayHandle, NET_DVR_PLAYSTOPAUDIO, 0, NULL);
  873. m_ctlVolume.SetPos(0);
  874. ((CButton *)GetDlgItem(IDC_SOUND))->SetIcon(m_hSoundStopIcon);
  875. m_bSound = FALSE;
  876. }
  877. UpdateData(FALSE);
  878. Invalidate(TRUE);
  879. }
  880. m_bPause = FALSE;
  881. m_bSetFrame = FALSE;
  882. F_SetStopState();
  883. }
  884. void CRemoteFilePlay::F_ShowNormal()
  885. {
  886. GetDlgItem(IDC_WND)->SetWindowPos(NULL,m_rcWnd.left,m_rcWnd.top,m_rcWnd.Width(),m_rcWnd.Height(),SWP_SHOWWINDOW);
  887. ::SetWindowPos(m_hWnd,NULL,m_rcParent.left,m_rcParent.top,m_rcParent.Width(),m_rcParent.Height(),SWP_SHOWWINDOW);
  888. ::SetWindowPos(m_hPareTabWnd,NULL,m_rcPareTab.left,m_rcPareTab.top,m_rcPareTab.Width(),m_rcPareTab.Height(),SWP_SHOWWINDOW);
  889. ::SetWindowPos(m_hPareDlgWnd,NULL,m_rcPareDlg.left,m_rcPareDlg.top,m_rcPareDlg.Width(),m_rcPareDlg.Height(),SWP_SHOWWINDOW);
  890. F_EnableFlashWnd(TRUE);
  891. Invalidate(FALSE);
  892. UpdateWindow();
  893. }
  894. void CRemoteFilePlay::F_EnableFlashWnd(BOOL bEnable)
  895. {
  896. if(bEnable)
  897. {
  898. //THE same to multiplay
  899. GetDlgItem(IDC_PLAYSTATUS)->ModifyStyle(0,WS_VISIBLE,0);
  900. GetDlgItem(IDC_PLAY_FILE)->ModifyStyle(0,WS_VISIBLE,0);
  901. GetDlgItem(IDC_STOP)->ModifyStyle(0,WS_VISIBLE,0);
  902. GetDlgItem(IDC_SLOW)->ModifyStyle(0,WS_VISIBLE,0);
  903. GetDlgItem(IDC_FAST)->ModifyStyle(0,WS_VISIBLE,0);
  904. GetDlgItem(IDC_SOUND)->ModifyStyle(0,WS_VISIBLE,0);
  905. GetDlgItem(IDC_VOLUME_SLIDER)->ModifyStyle(0,WS_VISIBLE,0);
  906. GetDlgItem(IDC_PROGRESS_SLIDER)->ModifyStyle(0,WS_VISIBLE,0);
  907. GetDlgItem(IDC_DATESTART)->ModifyStyle(0,WS_VISIBLE,0);
  908. GetDlgItem(IDC_DATESTOP)->ModifyStyle(0,WS_VISIBLE,0);
  909. GetDlgItem(IDC_TIMESTOP)->ModifyStyle(0,WS_VISIBLE,0);
  910. GetDlgItem(IDC_TIMESTART)->ModifyStyle(0,WS_VISIBLE,0);
  911. GetDlgItem(IDC_COMBOFILETYPE)->ModifyStyle(0,WS_VISIBLE,0);
  912. GetDlgItem(IDC_SEARCHLIST)->ModifyStyle(0,WS_VISIBLE,0);
  913. GetDlgItem(IDC_CAPPIC)->ModifyStyle(0,WS_VISIBLE,0);
  914. //the only for single play
  915. GetDlgItem(IDC_DOWNLOAD)->ModifyStyle(0,WS_VISIBLE,0);
  916. GetDlgItem(IDC_REMOTEFILRLIST)->ModifyStyle(0,WS_VISIBLE,0);
  917. if(m_bDown)
  918. GetDlgItem(IDC_DOWNPROGRESS)->ModifyStyle(0,WS_VISIBLE,0);
  919. GetDlgItem(IDC_STEP)->ModifyStyle(0,WS_VISIBLE,0);
  920. GetDlgItem(IDC_GOTOSTART)->ModifyStyle(0,WS_VISIBLE,0);
  921. }
  922. else
  923. {
  924. //THE same to multiplay
  925. GetDlgItem(IDC_PLAYSTATUS)->ModifyStyle(WS_VISIBLE,0,0);
  926. GetDlgItem(IDC_PLAY_FILE)->ModifyStyle(WS_VISIBLE,0,0);
  927. GetDlgItem(IDC_STOP)->ModifyStyle(WS_VISIBLE,0,0);
  928. GetDlgItem(IDC_SLOW)->ModifyStyle(WS_VISIBLE,0,0);
  929. GetDlgItem(IDC_FAST)->ModifyStyle(WS_VISIBLE,0,0);
  930. GetDlgItem(IDC_SOUND)->ModifyStyle(WS_VISIBLE,0,0);
  931. GetDlgItem(IDC_VOLUME_SLIDER)->ModifyStyle(WS_VISIBLE,0,0);
  932. GetDlgItem(IDC_PROGRESS_SLIDER)->ModifyStyle(WS_VISIBLE,0,0);
  933. GetDlgItem(IDC_DATESTART)->ModifyStyle(WS_VISIBLE,0,0);
  934. GetDlgItem(IDC_DATESTOP)->ModifyStyle(WS_VISIBLE,0,0);
  935. GetDlgItem(IDC_TIMESTOP)->ModifyStyle(WS_VISIBLE,0,0);
  936. GetDlgItem(IDC_TIMESTART)->ModifyStyle(WS_VISIBLE,0,0);
  937. GetDlgItem(IDC_COMBOFILETYPE)->ModifyStyle(WS_VISIBLE,0,0);
  938. GetDlgItem(IDC_SEARCHLIST)->ModifyStyle(WS_VISIBLE,0,0);
  939. GetDlgItem(IDC_CAPPIC)->ModifyStyle(WS_VISIBLE,0,0);
  940. //the only for single play
  941. GetDlgItem(IDC_REMOTEFILRLIST)->ModifyStyle(WS_VISIBLE,0,0);
  942. GetDlgItem(IDC_STEP)->ModifyStyle(WS_VISIBLE,0,0);
  943. GetDlgItem(IDC_GOTOSTART)->ModifyStyle(WS_VISIBLE,0,0);
  944. GetDlgItem(IDC_DOWNLOAD)->ModifyStyle(WS_VISIBLE,0,0);
  945. GetDlgItem(IDC_DOWNPROGRESS)->ModifyStyle(WS_VISIBLE,0,0);
  946. }
  947. }
  948. BOOL CRemoteFilePlay::IsInWnd(CPoint point)
  949. {
  950. CRect rc;
  951. GetDlgItem(IDC_WND)->GetWindowRect(&rc);
  952. ScreenToClient(&rc);
  953. if(PtInRect(&rc,point))
  954. return TRUE;
  955. else
  956. return FALSE;
  957. }
  958. void CRemoteFilePlay::F_ShowFullScreen()
  959. {
  960. F_EnableFlashWnd(FALSE);
  961. CRect rc,rcClient;
  962. ::GetWindowRect(m_hPareDlgWnd,m_rcPareDlg);
  963. ::GetWindowRect(m_hPareTabWnd,m_rcPareTab);
  964. ::ScreenToClient(m_hPareDlgWnd,(POINT*)(&m_rcPareTab));
  965. ::ScreenToClient(m_hPareDlgWnd,(POINT*)(&m_rcPareTab)+1);
  966. ::GetWindowRect(m_hWnd,m_rcParent);
  967. ::ScreenToClient(m_hPareTabWnd,(POINT*)(&m_rcParent));
  968. ::ScreenToClient(m_hPareTabWnd,(POINT*)(&m_rcParent)+1);
  969. ::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);
  970. ::GetClientRect(m_hPareDlgWnd,rc);
  971. ::SetWindowPos(m_hPareTabWnd,NULL,rc.left,rc.top,rc.Width(),rc.Height(),SWP_SHOWWINDOW);
  972. ::GetClientRect(m_hPareTabWnd,rc);
  973. ::SetWindowPos(m_hWnd,NULL,rc.left,rc.top,rc.Width(),rc.Height(),SWP_SHOWWINDOW);
  974. GetDlgItem(IDC_WND)->GetClientRect(rcClient);
  975. GetDlgItem(IDC_WND)->GetWindowRect(rc);
  976. int iEdge=(rc.Width()-rcClient.Width())/2;
  977. rc=m_rcScreen;
  978. rc.left-=iEdge;
  979. rc.right+=iEdge;
  980. rc.top-=iEdge;
  981. rc.bottom+=iEdge;
  982. this->ScreenToClient(rc);
  983. ::SetWindowPos(GetDlgItem(IDC_WND)->m_hWnd,NULL,rc.left,rc.top,rc.Width(),rc.Height(),SWP_SHOWWINDOW);
  984. Invalidate(FALSE);
  985. UpdateWindow();
  986. }
  987. void CRemoteFilePlay::OnSelchangeComboserver()
  988. {
  989. // TODO: Add your control notification handler code here
  990. iSelServer = m_ServerCtrl.GetCurSel() - 1;
  991. if(iSelServer < 0)
  992. return;
  993. m_lServerID = serverinfo[iSelServer].m_lServerID;
  994. m_lServerType = serverinfo[iSelServer].m_wServerType;
  995. m_lStartChan = serverinfo[iSelServer].m_lStartChannel;
  996. int m_iChanNum = serverinfo[iSelServer].m_iServerChannelNumber;
  997. m_ChannelCtrl.ResetContent();
  998. CString sTemp;
  999. for(int i=0; i<m_iChanNum; i++)
  1000. {
  1001. sTemp.Format("%d", i+m_lStartChan);
  1002. m_ChannelCtrl.AddString(sTemp);
  1003. }
  1004. m_iChannel = 0;
  1005. m_ChannelCtrl.SetCurSel(m_iChannel);
  1006. m_FileType.ResetContent();
  1007. if(m_lServerType == ATMDVR) //ATM DVR
  1008. {
  1009. m_FileType.AddString("全部");
  1010. m_FileType.AddString("定时录像");
  1011. m_FileType.AddString("移动侦测");
  1012. m_FileType.AddString("接近报警");
  1013. m_FileType.AddString("出钞报警");
  1014. m_FileType.AddString("进钞报警");
  1015. m_FileType.AddString("命令触发");
  1016. m_FileType.AddString("手动录像");
  1017. m_FileType.AddString("震动报警");
  1018. if (serverinfo[iSelServer].m_dwAlarmInNum == 5)
  1019. {
  1020. m_FileType.AddString("环境触发报警");
  1021. }
  1022. }
  1023. if(m_lServerType == DVR || m_lServerType >= DVR_HC) //DVR
  1024. {
  1025. m_FileType.AddString("全部");
  1026. m_FileType.AddString("定时录像");
  1027. m_FileType.AddString("移动侦测");
  1028. m_FileType.AddString("报警触发");
  1029. m_FileType.AddString("报警|动测");
  1030. m_FileType.AddString("报警&动测");
  1031. m_FileType.AddString("命令触发");
  1032. m_FileType.AddString("手动触发");
  1033. }
  1034. iFileType = 0;
  1035. m_FileType.SetCurSel(iFileType);
  1036. }
  1037. void CRemoteFilePlay::OnCancel()
  1038. {
  1039. // TODO: Add extra cleanup here
  1040. //CDialog::OnCancel();
  1041. }
  1042. void CRemoteFilePlay::OnButtonsave()
  1043. {
  1044. // TODO: Add your control notification handler code here
  1045. //zxy 2005-01-04
  1046. static char szFilter[]="All File(*.mp4)|*.*||";
  1047. char m_sFile[256] = "c:\\Savefile.mp4";
  1048. CString csFile;
  1049. CFileDialog dlg(FALSE,"*.mp4","Savefile.mp4",OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY,
  1050. szFilter);
  1051. if(dlg.DoModal()==IDOK)
  1052. {
  1053. csFile = dlg.GetPathName();
  1054. UpdateData(FALSE);
  1055. sprintf(m_sFile, "%s", csFile);
  1056. }
  1057. if(NET_DVR_PlayBackSaveData(m_nPlayHandle, m_sFile))
  1058. {
  1059. m_bSaveFile = TRUE;
  1060. }
  1061. else
  1062. {
  1063. MessageBox("文件保存失败!", "温馨提示", MB_ICONINFORMATION);
  1064. }
  1065. }
  1066. void CRemoteFilePlay::OnButtonstopsave()
  1067. {
  1068. // TODO: Add your control notification handler code here
  1069. if(m_bSaveFile)
  1070. {
  1071. NET_DVR_StopPlayBackSave(m_nPlayHandle);
  1072. m_bSaveFile = FALSE;
  1073. MessageBox("停止保存成功!", "温馨提示", MB_ICONINFORMATION);
  1074. }
  1075. }
  1076. //zxy 2005-01-04
  1077. /*
  1078. void CRemoteFilePlay::OnButplay()
  1079. {
  1080. // TODO: Add your control notification handler code here
  1081. UpdateData(TRUE);
  1082. int fileselpos = 0;
  1083. CString csFileName;
  1084. POSITION pos = m_Filelist.GetFirstSelectedItemPosition();
  1085. if(pos == NULL)
  1086. {
  1087. }
  1088. fileselpos = m_Filelist.GetNextSelectedItem(pos);
  1089. csFileName.Format("%s",m_Filelist.GetItemText(fileselpos,0));
  1090. if(csFileName.IsEmpty())
  1091. return;
  1092. TRACE("远程回放文件:%s \n", csFileName);
  1093. sprintf(filename,"%s",csFileName);
  1094. // if(NET_DVR_PlayBackByNameLocDisplay(m_lServerID, filename))
  1095. {
  1096. TRACE("远程控制本地回放成功!");
  1097. }
  1098. }
  1099. void CRemoteFilePlay::OnButstop()
  1100. {
  1101. // TODO: Add your control notification handler code here
  1102. // if(NET_DVR_StopLocDisplayPlay(m_lServerID))
  1103. {
  1104. TRACE("停止远程控制本地回放成功!");
  1105. }
  1106. }
  1107. */
  1108. void CRemoteFilePlay::OnGotostart()
  1109. {
  1110. // TODO: Add your control notification handler code here
  1111. NET_DVR_PlayBackControl(m_nPlayHandle,NET_DVR_PLAYSETPOS, 0, NULL);
  1112. }