MyOutput.cpp 19 KB

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