MyOutput.cpp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736
  1. // MyOutput.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "newclient.h"
  5. #include "MyOutput.h"
  6. #include "CurWin.h"
  7. #include "newclientDlg.h"
  8. #include "DecodeCardSDK.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. WORD iActiveWndNumber = 0;
  15. WORD m_iSubWndCreated = 0;
  16. extern void F_AddEvent(CString csEvent);
  17. extern CLIENTPARAM ClientParam;
  18. extern CCurwin mycurwin;
  19. extern CMyOutput myoutput[MAXVIEWNUM];
  20. extern HBRUSH hBrush;
  21. extern BOOL g_bShareSound;
  22. extern int g_nNetDelay;
  23. /////////////////////////////////////////////////////////////////////////////
  24. // CMyOutput dialog
  25. RECT g_ShowRect3;
  26. RECT g_MouseRect3;
  27. void CALLBACK DrawFun3(long nPort,HDC hDc,DWORD nUser)
  28. {
  29. ::DrawEdge(hDc, &g_ShowRect3, BDR_SUNKENOUTER, BF_RECT);
  30. SetBkMode(hDc, TRANSPARENT);
  31. }
  32. void CALLBACK RealDataCallBack(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,DWORD dwUser)
  33. {
  34. int a=0;
  35. // TRACE("lRealHandle = %d dwUser = %d dwDataType = %d dwBufSize = %d", lRealHandle, dwUser, dwDataType, dwBufSize);
  36. }
  37. CMyOutput::CMyOutput(CWnd* pParent /*=NULL*/)
  38. : CDialog(CMyOutput::IDD, pParent)
  39. {
  40. //{{AFX_DATA_INIT(CMyOutput)
  41. // NOTE: the ClassWizard will add member initialization here
  42. //}}AFX_DATA_INIT
  43. m_bIsAutoSave = FALSE;
  44. }
  45. void CMyOutput::DoDataExchange(CDataExchange* pDX)
  46. {
  47. CDialog::DoDataExchange(pDX);
  48. //{{AFX_DATA_MAP(CMyOutput)
  49. // NOTE: the ClassWizard will add DDX and DDV calls here
  50. //}}AFX_DATA_MAP
  51. }
  52. BEGIN_MESSAGE_MAP(CMyOutput, CDialog)
  53. //{{AFX_MSG_MAP(CMyOutput)
  54. ON_WM_CREATE()
  55. ON_WM_CTLCOLOR()
  56. ON_WM_DESTROY()
  57. ON_WM_LBUTTONDBLCLK()
  58. ON_WM_LBUTTONDOWN()
  59. ON_WM_MOUSEMOVE()
  60. ON_WM_PAINT()
  61. ON_WM_RBUTTONDOWN()
  62. ON_WM_TIMER()
  63. ON_COMMAND(IDC_MENU_FRONTPAGE, OnMenuFrontpage)
  64. ON_COMMAND(IDC_MENU_NEXTPAGE, OnMenuNextpage)
  65. ON_COMMAND(IDC_MENU_PAUSECYCLE, OnMenuPausecycle)
  66. ON_COMMAND(IDC_MENU_SOUND, OnMenuSound)
  67. ON_COMMAND(IDC_MENU_MULTISCREEN, OnMenuMultiscreen)
  68. ON_WM_LBUTTONUP()
  69. //}}AFX_MSG_MAP
  70. END_MESSAGE_MAP()
  71. /////////////////////////////////////////////////////////////////////////////
  72. // CMyOutput message handlers
  73. BOOL CMyOutput::OnInitDialog()
  74. {
  75. CDialog::OnInitDialog();
  76. // TODO: Add extra initialization here
  77. // m_iSubWndCreated = 0;
  78. m_dwDVRIP = 0;
  79. return TRUE; // return TRUE unless you set the focus to a control
  80. // EXCEPTION: OCX Property Pages should return FALSE
  81. }
  82. void CMyOutput::StartNet(PIP_INFO ipinfo)
  83. {
  84. NET_DVR_CLIENTINFO playstru;
  85. char ipaddress[256];
  86. char multiipaddress[256];
  87. char user[100];
  88. char password[100];
  89. WORD iServerPort;
  90. CString sTemp;
  91. ZeroMemory(user,100);
  92. ZeroMemory(password,100);
  93. if(m_iPlayhandle != -1)
  94. {
  95. TRACE("NET_DVR_StopRealPlay m_iPlayhandle = %d", m_iPlayhandle);
  96. if(g_bShareSound)
  97. {
  98. NET_DVR_CloseSoundShare(m_iPlayhandle);
  99. }
  100. if(!NET_DVR_StopRealPlay(m_iPlayhandle))
  101. {
  102. TRACE("NET_DVR_StopRealPlay 失败 m_iPlayhandle = %d", m_iPlayhandle);
  103. }
  104. }
  105. m_bNeedjudge = FALSE;
  106. playstru.hPlayWnd = GetSafeHwnd();
  107. playstru.lChannel = ipinfo->m_iChannel;
  108. playstru.lLinkMode = ipinfo->m_dwProtocol;
  109. if(ipinfo->m_dwMultiIPvalue == 0)
  110. strcpy(multiipaddress,"");
  111. else
  112. sprintf(multiipaddress,"%s",ipinfo->m_csMultiIP);
  113. playstru.sMultiCastIP = multiipaddress;
  114. iServerPort = ipinfo->m_wServerport;
  115. //TRACE("StartNet");
  116. m_iPlayhandle = NET_DVR_RealPlay(ipinfo->m_lServerID, &playstru);
  117. if(m_iPlayhandle == -1)
  118. {
  119. DWORD dwErr = NET_DVR_GetLastError();
  120. sprintf(ipaddress,"%s",ipinfo->m_csIP);
  121. sTemp.Format("访问IP:%s 通道%d 连接启动失败 dwErr = %d",ipaddress,playstru.lChannel, dwErr);
  122. F_AddEvent(sTemp);
  123. TRACE(sTemp);
  124. }
  125. else
  126. {
  127. //TRACE("StartNet m_iPlayhandle = %d", m_iPlayhandle);
  128. switch(g_nNetDelay) {
  129. case 0:
  130. NET_DVR_SetPlayerBufNumber(m_iPlayhandle, 1);
  131. break;
  132. case 1:
  133. NET_DVR_SetPlayerBufNumber(m_iPlayhandle, 6);
  134. break;
  135. case 2:
  136. NET_DVR_SetPlayerBufNumber(m_iPlayhandle, 15);
  137. break;
  138. case 3:
  139. NET_DVR_SetPlayerBufNumber(m_iPlayhandle, 30);
  140. break;
  141. case 4:
  142. NET_DVR_SetPlayerBufNumber(m_iPlayhandle, 45);
  143. break;
  144. default:
  145. NET_DVR_SetPlayerBufNumber(m_iPlayhandle, 15);
  146. break;
  147. }
  148. //NET_DVR_SetPlayerBufNumber(m_iPlayhandle, 15);
  149. NET_DVR_ThrowBFrame(m_iPlayhandle,1);
  150. NET_DVR_SetRealDataCallBack(m_iPlayhandle, RealDataCallBack, m_iPlayhandle);
  151. m_csIP = ipinfo->m_csIP;
  152. m_dwDVRIP = ipinfo->m_dwIPvalue;
  153. m_lServerID = ipinfo->m_lServerID;
  154. m_iChannel = playstru.lChannel;
  155. m_bNeedjudge = TRUE;
  156. }
  157. CNewclientDlg* mainwnd =(CNewclientDlg*) AfxGetMainWnd();
  158. m_iWindowNum = mainwnd->WINDOWNUM;
  159. }
  160. void CMyOutput::StopNet()
  161. {
  162. if(m_iPlayhandle != -1)
  163. {
  164. if(m_bFileSave)
  165. NET_DVR_StopSaveRealData(m_iPlayhandle);
  166. m_bFileSave = FALSE;
  167. if(!NET_DVR_StopRealPlay(m_iPlayhandle))
  168. {
  169. TRACE("NET_DVR_StopRealPlay 失败 m_iPlayhandle = %d", m_iPlayhandle);
  170. }
  171. //TRACE("NET_DVR_StopRealPlay");
  172. m_bNeedjudge = FALSE;
  173. invateframe();
  174. m_iPlayhandle = -1;
  175. ClientParam.m_bPlaySound[m_iSubWndNumber] = FALSE;
  176. CNewclientDlg* mainwnd = (CNewclientDlg*) AfxGetMainWnd();
  177. }
  178. }
  179. void CMyOutput::StartCard(PIP_INFO ipinfo)
  180. {
  181. NET_DVR_CARDINFO playstru;
  182. char ipaddress[256];
  183. char multiipaddress[256];
  184. char user[100];
  185. char password[100];
  186. WORD iServerPort;
  187. CString sTemp;
  188. ULONG ulMode = 0;
  189. ZeroMemory(user,100);
  190. ZeroMemory(password,100);
  191. if(m_iPlayhandle != -1)
  192. {
  193. if(!NET_DVR_StopRealPlay(m_iPlayhandle))
  194. {
  195. TRACE("NET_DVR_StopRealPlay 失败 m_iPlayhandle = %d", m_iPlayhandle);
  196. }
  197. }
  198. m_bNeedjudge = FALSE;
  199. playstru.lChannel = ipinfo->m_iChannel;
  200. playstru.lLinkMode = ipinfo->m_dwProtocol;
  201. if(ipinfo->m_dwMultiIPvalue == 0)
  202. strcpy(multiipaddress,"");
  203. else
  204. sprintf(multiipaddress,"%s",ipinfo->m_csMultiIP);
  205. playstru.sMultiCastIP = multiipaddress;
  206. iServerPort = ipinfo->m_wServerport;
  207. playstru.struDisplayPara.nLeft = m_display_para.nLeft;
  208. playstru.struDisplayPara.nTop = m_display_para.nTop;
  209. playstru.struDisplayPara.nWidth = m_display_para.nWidth;
  210. playstru.struDisplayPara.nHeight = m_display_para.nHeight;
  211. playstru.struDisplayPara.bToScreen = 1;
  212. playstru.struDisplayPara.bToVideoOut = 1;
  213. TRACE("使用解码卡");
  214. m_iPlayhandle = NET_DVR_RealPlay_Card(ipinfo->m_lServerID,&playstru,m_iSubWndNumber);
  215. if(m_iPlayhandle == -1)
  216. {
  217. sprintf(ipaddress,"%s",ipinfo->m_csIP);
  218. sTemp.Format("访问IP:%s 通道%d 连接启动失败",ipaddress,playstru.lChannel);
  219. F_AddEvent(sTemp);
  220. TRACE(sTemp);
  221. }
  222. else
  223. {
  224. switch(g_nNetDelay) {
  225. case 0:
  226. ulMode = 1;
  227. break;
  228. case 1:
  229. ulMode = 2;
  230. break;
  231. case 2:
  232. ulMode = 3;
  233. break;
  234. case 3:
  235. ulMode = 4;
  236. break;
  237. case 4:
  238. ulMode = 5;
  239. break;
  240. default:
  241. ulMode = 3;
  242. break;
  243. }
  244. HW_SetStreamOpenMode((HANDLE)m_iSubWndNumber, ulMode);
  245. NET_DVR_ThrowBFrame(m_iPlayhandle,1);
  246. m_csIP = ipinfo->m_csIP;
  247. m_dwDVRIP = ipinfo->m_dwIPvalue;
  248. m_lServerID = ipinfo->m_lServerID;
  249. m_iChannel = playstru.lChannel;
  250. m_bNeedjudge = TRUE;
  251. }
  252. }
  253. BOOL CMyOutput::DestroyWindow()
  254. {
  255. // TODO: Add your specialized code here and/or call the base class
  256. return CDialog::DestroyWindow();
  257. }
  258. BOOL CMyOutput::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
  259. {
  260. // TODO: Add your specialized code here and/or call the base class
  261. if ((nID == 2) || (nID == 1))
  262. return TRUE;
  263. return CDialog::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
  264. }
  265. int CMyOutput::OnCreate(LPCREATESTRUCT lpCreateStruct)
  266. {
  267. if (CDialog::OnCreate(lpCreateStruct) == -1)
  268. return -1;
  269. // TODO: Add your specialized creation code here
  270. m_iSubWndNumber = m_iSubWndCreated++;
  271. m_iPlayhandle = -1;
  272. m_bPlaying = FALSE;
  273. m_bNeedjudge = FALSE;
  274. m_bFileSave = FALSE;
  275. return 0;
  276. }
  277. HBRUSH CMyOutput::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
  278. {
  279. HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
  280. // TODO: Change any attributes of the DC here
  281. if(ClientParam.m_bUseCard)
  282. {
  283. NET_DVR_RestoreSurface_Card();
  284. return hBrush;
  285. }
  286. // TODO: Return a different brush if the default is not desired
  287. return hbr;
  288. }
  289. void CMyOutput::OnDestroy()
  290. {
  291. CDialog::OnDestroy();
  292. // TODO: Add your message handler code here
  293. }
  294. void CMyOutput::OnLButtonDblClk(UINT nFlags, CPoint point)
  295. {
  296. // TODO: Add your message handler code here and/or call default
  297. iActiveWndNumber = m_iSubWndNumber;
  298. if(m_iPlayhandle < 0)
  299. return;
  300. CNewclientDlg* mainwnd =(CNewclientDlg*) AfxGetMainWnd();
  301. m_iWindowNum = mainwnd->WINDOWNUM;
  302. if(ClientParam.m_bFullScreen || ClientParam.m_bMultiScreen)
  303. {
  304. ClientParam.m_bFullScreen = FALSE;
  305. ClientParam.m_bEnlarged = FALSE;
  306. ClientParam.m_bMultiScreen = FALSE;
  307. NET_DVR_ThrowBFrame(m_iPlayhandle, 1);
  308. mainwnd->F_EndFullScreen();
  309. mainwnd->ArrayWindow(iActiveWndNumber,m_iWindowNum);
  310. mycurwin.ShowWindow(SW_SHOW);
  311. mainwnd->MoveCurWin(m_iWindowNum,iActiveWndNumber);
  312. return;
  313. }
  314. if( (ClientParam.m_bEnlarged) || (m_iWindowNum == 1) )
  315. { //一个窗口或者窗口放大
  316. mainwnd->F_FullScreen();
  317. MoveWindow(0, 0, 1024, 768, TRUE);
  318. NET_DVR_ThrowBFrame(m_iPlayhandle, 0);
  319. ShowWindow(SW_SHOW);
  320. ClientParam.m_bFullScreen = TRUE;
  321. }
  322. else
  323. { //多窗口
  324. NET_DVR_ThrowBFrame(m_iPlayhandle,0);
  325. m_iWindowNum = 1;
  326. ClientParam.m_bEnlarged = TRUE;
  327. mainwnd->ArrayWindow(iActiveWndNumber,m_iWindowNum);
  328. mainwnd->MoveCurWin(m_iWindowNum,iActiveWndNumber);
  329. }
  330. if(!ClientParam.m_bUseCard)
  331. {
  332. DWORD dwBright,dwContrast, dwSaturation, dwHue;
  333. dwBright = dwContrast = dwContrast = dwHue = 0;
  334. NET_DVR_ClientGetVideoEffect(m_iPlayhandle, &dwBright,&dwContrast, &dwSaturation, &dwHue);
  335. ClientParam.m_VideoInfo[iActiveWndNumber].m_iBrightness = dwBright;
  336. ClientParam.m_VideoInfo[iActiveWndNumber].m_iContrast = dwContrast;
  337. ClientParam.m_VideoInfo[iActiveWndNumber].m_iSaturation = dwSaturation;
  338. ClientParam.m_VideoInfo[iActiveWndNumber].m_iHue = dwHue;
  339. }
  340. CDialog::OnLButtonDblClk(nFlags, point);
  341. }
  342. void CMyOutput::OnLButtonDown(UINT nFlags, CPoint point)
  343. {
  344. // TODO: Add your message handler code here and/or call default
  345. CNewclientDlg* mainwnd =(CNewclientDlg*) AfxGetMainWnd();
  346. if(iActiveWndNumber != m_iSubWndNumber)
  347. {
  348. iActiveWndNumber = m_iSubWndNumber;
  349. mainwnd->MoveCurWin(mainwnd->WINDOWNUM, iActiveWndNumber);
  350. mainwnd->F_ShowVideoParams();
  351. if(!ClientParam.m_bUseCard)
  352. {
  353. DWORD dwBright,dwContrast, dwSaturation, dwHue;
  354. dwBright = dwContrast = dwSaturation = dwHue = 0;
  355. NET_DVR_ClientGetVideoEffect(m_iPlayhandle, &dwBright,&dwContrast, &dwSaturation, &dwHue);
  356. ClientParam.m_VideoInfo[iActiveWndNumber].m_iBrightness = dwBright;
  357. ClientParam.m_VideoInfo[iActiveWndNumber].m_iContrast = dwContrast;
  358. ClientParam.m_VideoInfo[iActiveWndNumber].m_iSaturation = dwSaturation;
  359. ClientParam.m_VideoInfo[iActiveWndNumber].m_iHue = dwHue;
  360. }
  361. }
  362. if (MK_CONTROL&nFlags&&(m_iPlayhandle != -1))
  363. {
  364. NET_DVR_RigisterDrawFun(m_iPlayhandle, DrawFun3, 0);
  365. if (point.x < 0)
  366. point.x = 0;
  367. g_MouseRect3.left=point.x/16*16;
  368. if (point.y < 0)
  369. point.y = 0;
  370. g_MouseRect3.top=point.y/16*16;
  371. g_MouseRect3.right=g_MouseRect3.left;
  372. g_MouseRect3.bottom=g_MouseRect3.top;
  373. POINT tPoint=point;
  374. g_ShowRect3.left=tPoint.x/16*16;
  375. g_ShowRect3.top=tPoint.y/16*16;
  376. g_ShowRect3.right=tPoint.x/16*16+1;
  377. g_ShowRect3.bottom=tPoint.y/16*16+1;
  378. }
  379. CDialog::OnLButtonDown(nFlags, point);
  380. }
  381. void CMyOutput::OnMouseMove(UINT nFlags, CPoint point)
  382. {
  383. // TODO: Add your message handler code here and/or call default
  384. if ((MK_CONTROL&nFlags) && (MK_LBUTTON&nFlags) && (m_iPlayhandle != -1))
  385. {
  386. POINT tPoint=point;
  387. g_ShowRect3.right=tPoint.x/16*16;
  388. g_ShowRect3.bottom=tPoint.y/16*16;
  389. }
  390. CDialog::OnMouseMove(nFlags, point);
  391. }
  392. void CMyOutput::OnPaint()
  393. {
  394. CPaintDC dc(this); // device context for painting
  395. // TODO: Add your message handler code here
  396. if(ClientParam.m_bUseCard)
  397. NET_DVR_RestoreSurface_Card();
  398. // Do not call CDialog::OnPaint() for painting messages
  399. }
  400. void CMyOutput::OnRButtonDown(UINT nFlags, CPoint point)
  401. {
  402. CancelSelectZoom();
  403. // TODO: Add your message handler code here and/or call default
  404. CMenu m_PopMenu;
  405. CNewclientDlg* mainwnd =(CNewclientDlg*) AfxGetMainWnd();
  406. if(iActiveWndNumber != m_iSubWndNumber)
  407. {
  408. iActiveWndNumber = m_iSubWndNumber;
  409. mainwnd->MoveCurWin(mainwnd->WINDOWNUM, iActiveWndNumber);
  410. mainwnd->F_ShowVideoParams();
  411. if(!ClientParam.m_bUseCard)
  412. {
  413. DWORD dwBright,dwContrast, dwSaturation, dwHue;
  414. dwBright = dwContrast = dwSaturation = dwHue = 0;
  415. NET_DVR_ClientGetVideoEffect(m_iPlayhandle, &dwBright,&dwContrast, &dwSaturation, &dwHue);
  416. ClientParam.m_VideoInfo[iActiveWndNumber].m_iBrightness = dwBright;
  417. ClientParam.m_VideoInfo[iActiveWndNumber].m_iContrast = dwContrast;
  418. ClientParam.m_VideoInfo[iActiveWndNumber].m_iSaturation = dwSaturation;
  419. ClientParam.m_VideoInfo[iActiveWndNumber].m_iHue = dwHue;
  420. }
  421. }
  422. if(ClientParam.m_bFullScreen || ClientParam.m_bMultiScreen)
  423. return;
  424. if(!m_PopMenu.LoadMenu(IDR_MENU1))
  425. return;
  426. ClientToScreen(&point);
  427. CMenu *psub = (CMenu *)m_PopMenu.GetSubMenu(0);
  428. psub->EnableMenuItem(0, MF_BYPOSITION | MF_DISABLED | MF_GRAYED);
  429. psub->EnableMenuItem(1, MF_BYPOSITION | MF_DISABLED | MF_GRAYED);
  430. psub->EnableMenuItem(2, MF_BYPOSITION | MF_DISABLED | MF_GRAYED);
  431. psub->EnableMenuItem(3, MF_BYPOSITION | MF_DISABLED | MF_GRAYED);
  432. if(ClientParam.m_bCycling)
  433. {
  434. if(ClientParam.m_bPaused)
  435. psub->ModifyMenu(0, MF_BYPOSITION, IDC_MENU_PAUSECYCLE, "开始循环");
  436. else
  437. psub->ModifyMenu(0, MF_BYPOSITION, IDC_MENU_PAUSECYCLE, "暂停循环");
  438. psub->EnableMenuItem(0, MF_BYPOSITION | MF_ENABLED);
  439. psub->EnableMenuItem(1, MF_BYPOSITION | MF_DISABLED | MF_GRAYED);
  440. psub->EnableMenuItem(2, MF_BYPOSITION | MF_DISABLED | MF_GRAYED);
  441. }
  442. else
  443. {
  444. if(ClientParam.m_bNextPage)
  445. {
  446. psub->EnableMenuItem(0, MF_BYPOSITION | MF_DISABLED | MF_GRAYED);
  447. psub->EnableMenuItem(1, MF_BYPOSITION | MF_ENABLED);
  448. }
  449. if(ClientParam.m_bFrontPage)
  450. {
  451. psub->EnableMenuItem(0, MF_BYPOSITION | MF_DISABLED | MF_GRAYED);
  452. psub->EnableMenuItem(2, MF_BYPOSITION | MF_ENABLED);
  453. }
  454. }
  455. //
  456. {
  457. if(ClientParam.m_bPlaySound[iActiveWndNumber])
  458. psub->ModifyMenu(3, MF_BYPOSITION, IDC_MENU_SOUND, "关闭声音");
  459. else
  460. psub->ModifyMenu(3, MF_BYPOSITION, IDC_MENU_SOUND, "打开声音");
  461. psub->EnableMenuItem(3, MF_BYPOSITION | MF_ENABLED);
  462. }
  463. psub->EnableMenuItem(4, MF_BYPOSITION | MF_ENABLED);
  464. psub->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);
  465. m_PopMenu.DestroyMenu();
  466. CDialog::OnRButtonDown(nFlags, point);
  467. }
  468. void CMyOutput::OnTimer(UINT nIDEvent)
  469. {
  470. // TODO: Add your message handler code here and/or call default
  471. CDialog::OnTimer(nIDEvent);
  472. }
  473. void CMyOutput::OnMenuFrontpage()
  474. {
  475. // TODO: Add your command handler code here
  476. CNewclientDlg* mainwnd =(CNewclientDlg*) AfxGetMainWnd();
  477. mainwnd->F_FrontPage();
  478. }
  479. void CMyOutput::OnMenuNextpage()
  480. {
  481. // TODO: Add your command handler code here
  482. CNewclientDlg* mainwnd =(CNewclientDlg*) AfxGetMainWnd();
  483. mainwnd->F_NextPage();
  484. }
  485. void CMyOutput::OnMenuPausecycle()
  486. {
  487. // TODO: Add your command handler code here
  488. CNewclientDlg* mainwnd =(CNewclientDlg*) AfxGetMainWnd();
  489. mainwnd->F_CyclePause();
  490. }
  491. void CMyOutput::OnMenuSound()
  492. {
  493. // TODO: Add your command handler code here
  494. int i;
  495. WORD wTemp;
  496. WORD wVolumevalue;
  497. wTemp = (0xFFFF) / 100;
  498. wVolumevalue = 50 * wTemp;
  499. if(myoutput[iActiveWndNumber].m_iPlayhandle >= 0)
  500. {
  501. if(ClientParam.m_bUseCard)
  502. {
  503. if(ClientParam.m_bPlaySound[iActiveWndNumber])
  504. {
  505. NET_DVR_CloseSound_Card(myoutput[iActiveWndNumber].m_iPlayhandle);
  506. ClientParam.m_bPlaySound[iActiveWndNumber] = FALSE;
  507. }
  508. else
  509. {
  510. NET_DVR_OpenSound_Card(myoutput[iActiveWndNumber].m_iPlayhandle);
  511. NET_DVR_AudioPreview_Card(myoutput[iActiveWndNumber].m_iPlayhandle, TRUE);
  512. NET_DVR_SetVolume_Card(myoutput[iActiveWndNumber].m_iPlayhandle, wVolumevalue);
  513. ClientParam.m_bPlaySound[iActiveWndNumber] = TRUE;
  514. }
  515. }
  516. else
  517. {
  518. TRACE("Close Audio");
  519. if(!g_bShareSound)
  520. {
  521. NET_DVR_CloseSound();
  522. }
  523. if(ClientParam.m_bPlaySound[iActiveWndNumber])
  524. {
  525. TRACE("Close m_bPlaySound[%d] Sound", iActiveWndNumber);
  526. ClientParam.m_bPlaySound[iActiveWndNumber] = FALSE;
  527. if(g_bShareSound)
  528. {
  529. NET_DVR_CloseSoundShare(myoutput[iActiveWndNumber].m_iPlayhandle);
  530. }
  531. }
  532. else
  533. {
  534. TRACE("Open m_bPlaySound[%d] = TRUE Sound", iActiveWndNumber);
  535. ClientParam.m_bPlaySound[iActiveWndNumber] = TRUE;
  536. if(g_bShareSound)
  537. {
  538. if(!NET_DVR_OpenSoundShare(myoutput[iActiveWndNumber].m_iPlayhandle))
  539. TRACE("Client Play Audio error");
  540. }
  541. else
  542. {
  543. if(!NET_DVR_OpenSound(myoutput[iActiveWndNumber].m_iPlayhandle))
  544. TRACE("Client Play Audio error");
  545. }
  546. if(!NET_DVR_Volume(myoutput[iActiveWndNumber].m_iPlayhandle, wVolumevalue))
  547. TRACE("Client Audio Volume error");
  548. }
  549. }
  550. if(!g_bShareSound)
  551. {
  552. for(i = 0; i < MAXVIEWNUM; i++)
  553. { //关闭别的窗口声音标志
  554. if(i == (int)iActiveWndNumber)
  555. continue;
  556. ClientParam.m_bPlaySound[i] = FALSE;
  557. }
  558. }
  559. }
  560. }
  561. void CMyOutput::OnMenuMultiscreen()
  562. {
  563. // TODO: Add your command handler code here
  564. if(m_iPlayhandle < 0)
  565. return;
  566. CNewclientDlg* mainwnd = (CNewclientDlg*) AfxGetMainWnd();
  567. ClientParam.m_bMultiScreen = TRUE;
  568. mainwnd->F_FullScreen();
  569. mainwnd->ArrayWindow(iActiveWndNumber,mainwnd->WINDOWNUM);
  570. mainwnd->MoveCurWin(mainwnd->WINDOWNUM,iActiveWndNumber);
  571. // StopNet();
  572. }
  573. void CMyOutput::invateframe()
  574. {
  575. Invalidate(TRUE);
  576. UpdateData(FALSE);
  577. if(ClientParam.m_bUseCard)
  578. NET_DVR_RefreshSurface_Card();
  579. }
  580. void CMyOutput::OnLButtonUp(UINT nFlags, CPoint point)
  581. {
  582. // TODO: Add your message handler code here and/or call default
  583. if ((MK_CONTROL&nFlags) && (m_iPlayhandle != -1))
  584. {
  585. POINT tPoint=point;
  586. g_ShowRect3.right=tPoint.x/16*16;
  587. g_ShowRect3.bottom=tPoint.y/16*16;
  588. NET_DVR_POINT_FRAME ptFrame;
  589. double scale = 1;
  590. if (ClientParam.m_bFullScreen)
  591. {
  592. scale = 0.32;
  593. }
  594. else if (m_iWindowNum == 1)
  595. {
  596. scale = 0.5;
  597. }
  598. else if (m_iWindowNum == 9)
  599. {
  600. scale = 1.5;
  601. }
  602. else if (m_iWindowNum == 16)
  603. {
  604. scale = 2;
  605. }
  606. ptFrame.xTop = (int)(g_MouseRect3.left*2*scale);
  607. ptFrame.yTop = (int)(g_MouseRect3.top*2*scale);
  608. ptFrame.xBottom = (int)(g_ShowRect3.right*2*scale);
  609. ptFrame.yBottom = (int)(g_ShowRect3.bottom*2*scale);
  610. if (g_MouseRect3.left < g_ShowRect3.right)
  611. {
  612. if (g_MouseRect3.top < g_ShowRect3.bottom)
  613. {
  614. ptFrame.bCounter = 4;
  615. }
  616. else
  617. {
  618. ptFrame.bCounter = 2;
  619. }
  620. }
  621. else
  622. {
  623. if (g_MouseRect3.top < g_ShowRect3.bottom)
  624. {
  625. ptFrame.bCounter = 3;
  626. }
  627. else
  628. {
  629. ptFrame.bCounter = 1;
  630. }
  631. }
  632. if (!NET_DVR_PTZSelZoomIn(m_iPlayhandle, &ptFrame))
  633. {
  634. CString tmp;
  635. tmp.Format("Error: NET_DVR_PTZSelZoomIn = %d", NET_DVR_GetLastError());
  636. AfxMessageBox(tmp);
  637. }
  638. CancelSelectZoom();
  639. }
  640. else
  641. {
  642. CancelSelectZoom();
  643. }
  644. CDialog::OnLButtonUp(nFlags, point);
  645. }
  646. void CMyOutput::CancelSelectZoom()
  647. {
  648. if (m_iPlayhandle != -1)
  649. {
  650. g_MouseRect3.top = 0;
  651. g_MouseRect3.left = 0;
  652. g_MouseRect3.right = 0;
  653. g_MouseRect3.bottom = 0;
  654. g_ShowRect3.top = 0;
  655. g_ShowRect3.left = 0;
  656. g_ShowRect3.right = 0;
  657. g_ShowRect3.bottom = 0;
  658. NET_DVR_RigisterDrawFun(m_iPlayhandle, NULL, 0);
  659. }
  660. }