RemoteChannelConfig.cpp 38 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148
  1. // RemoteChannelConfig.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "StoneU_HC_OCX.h"
  5. #include "RemoteChannelConfig.h"
  6. #include "RemoteRecordPlanConfig.h"
  7. #include "RemoteDetectConfig.h"
  8. #include "RemoteHideConfig.h"
  9. #include "RemoteHideAlarm.h"
  10. #include "VideoLost.h"
  11. #include "ShowString.h"
  12. #include "RemoteParamsCfg.h"
  13. #ifdef _DEBUG
  14. #define new DEBUG_NEW
  15. #undef THIS_FILE
  16. static char THIS_FILE[] = __FILE__;
  17. #endif
  18. extern CRemoteParamsCfg *m_pRemoteParam;
  19. extern SERVER_INFO serverinfo[MAXIPNUMBER];
  20. extern CLIENTPARAM ClientParam;
  21. LPNET_DVR_MOTION lpMotionDetect;
  22. LPNET_DVR_HIDEALARM lpHideAlarm;
  23. LPNET_DVR_VILOST lpVILost;
  24. WORD getFrameI(DWORD selFrameRate)
  25. {
  26. WORD nRet = 0;
  27. switch(selFrameRate)
  28. {
  29. case 0:
  30. nRet = 25;
  31. break;
  32. case 6:
  33. nRet = 2;
  34. break;
  35. case 7:
  36. nRet = 4;
  37. break;
  38. case 8:
  39. nRet = 6;
  40. break;
  41. case 9:
  42. nRet = 8;
  43. break;
  44. case 10:
  45. nRet = 10;
  46. break;
  47. case 11:
  48. nRet = 12;
  49. break;
  50. case 12:
  51. nRet = 16;
  52. break;
  53. case 13:
  54. nRet = 20;
  55. break;
  56. case 14:
  57. nRet = 15;
  58. break;
  59. case 15:
  60. nRet = 18;
  61. break;
  62. case 16:
  63. nRet = 22;
  64. break;
  65. default:
  66. nRet = 1;
  67. }
  68. nRet *= 4;
  69. return nRet;
  70. }
  71. /////////////////////////////////////////////////////////////////////////////
  72. // CRemoteChannelConfig dialog
  73. CRemoteChannelConfig::CRemoteChannelConfig(CWnd* pParent /*=NULL*/)
  74. : CDialog(CRemoteChannelConfig::IDD, pParent)
  75. {
  76. //{{AFX_DATA_INIT(CRemoteChannelConfig)
  77. m_ChannelName = _T("");
  78. m_bOsd = FALSE;
  79. m_bRecord = FALSE;
  80. m_bHide = FALSE;
  81. m_channame_x = 0;
  82. m_channame_y = 0;
  83. m_bChanname = FALSE;
  84. m_bDispWeek = FALSE;
  85. m_osd_y = 0;
  86. m_osd_x = 0;
  87. m_bMotion = FALSE;
  88. m_bHideAlarm = FALSE;
  89. m_BitRate = 0;
  90. m_bVILost = FALSE;
  91. m_FrameI = 0;
  92. m_bUseEvent = FALSE;
  93. //}}AFX_DATA_INIT
  94. }
  95. void CRemoteChannelConfig::DoDataExchange(CDataExchange* pDX)
  96. {
  97. CDialog::DoDataExchange(pDX);
  98. //{{AFX_DATA_MAP(CRemoteChannelConfig)
  99. DDX_Control(pDX, IDC_PARAMCOMBO, m_ParamCombo);
  100. DDX_Control(pDX, IDC_COMBOBPINTERVAL, m_BPIntervalCtrl);
  101. DDX_Control(pDX, IDC_PRERECORDTIME, m_PreRecordTime);
  102. DDX_Control(pDX, IDC_DELAY, m_DelayCtrl);
  103. DDX_Control(pDX, IDC_OSDTYPE, m_OsdType);
  104. DDX_Control(pDX, IDC_OSDATTRIB, m_OsdAttrib);
  105. DDX_Control(pDX, IDC_COMBOCOPYCHAN, m_CopyChannelCtrl);
  106. DDX_Control(pDX, IDC_COMCHAN, m_ChannelCtrl);
  107. DDX_Control(pDX, IDC_COMBOSTREAMTYPE, m_StreamTypeCtrl);
  108. DDX_Control(pDX, IDC_COMBORESOLUTION, m_ResolutionCtrl);
  109. DDX_Control(pDX, IDC_COMBOIMAGEQUALITY, m_ImageQualityCtrl);
  110. DDX_Control(pDX, IDC_COMBOBITRATETYPE, m_BitRateTypeCtrl);
  111. DDX_Control(pDX, IDC_COMBOFRAMERATE, m_FrameRateCtrl);
  112. DDX_Control(pDX, IDC_COMBOBITRATE, m_BitRateCtrl);
  113. DDX_Text(pDX, IDC_CHANNELNAME, m_ChannelName);
  114. DDX_Check(pDX, IDC_CHKOSD, m_bOsd);
  115. DDX_Check(pDX, IDC_CHKRECORD, m_bRecord);
  116. DDX_Check(pDX, IDC_CHKHIDEAREA, m_bHide);
  117. DDX_Text(pDX, IDC_CHANNAME_X, m_channame_x);
  118. DDX_Text(pDX, IDC_CHANNAME_Y, m_channame_y);
  119. DDX_Check(pDX, IDC_CHKCHANNAME, m_bChanname);
  120. DDX_Check(pDX, IDC_CHKDISPWEEK, m_bDispWeek);
  121. DDX_Text(pDX, IDC_OSD_Y, m_osd_y);
  122. DDX_Text(pDX, IDC_OSD_X, m_osd_x);
  123. DDX_Check(pDX, IDC_CHKMOTION, m_bMotion);
  124. DDX_Check(pDX, IDC_CHKHIDEALARM, m_bHideAlarm);
  125. DDX_Text(pDX, IDC_EDITBITRATE, m_BitRate);
  126. DDX_Check(pDX, IDC_CHKVILOST, m_bVILost);
  127. DDX_Text(pDX, IDC_EDITFRAMEI, m_FrameI);
  128. DDX_Check(pDX, IDC_CHECKEVENT, m_bUseEvent);
  129. //}}AFX_DATA_MAP
  130. }
  131. BEGIN_MESSAGE_MAP(CRemoteChannelConfig, CDialog)
  132. //{{AFX_MSG_MAP(CRemoteChannelConfig)
  133. ON_BN_CLICKED(IDC_BUTCHANCOPY, OnButchancopy)
  134. ON_BN_CLICKED(IDC_BUTMOTION, OnButmotion)
  135. ON_BN_CLICKED(IDC_BUTRECORD, OnButrecord)
  136. ON_BN_CLICKED(IDC_CHKRECORD, OnChkrecord)
  137. ON_BN_CLICKED(IDC_BUTHIDE, OnButhide)
  138. ON_BN_CLICKED(IDC_CHKHIDEAREA, OnChkhidearea)
  139. ON_BN_CLICKED(IDC_CHKOSD, OnChkosd)
  140. ON_BN_CLICKED(IDC_CHKCHANNAME, OnChkchanname)
  141. ON_CBN_SELCHANGE(IDC_COMCHAN, OnSelchangeComchan)
  142. ON_CBN_SELCHANGE(IDC_COMBOCOPYCHAN, OnSelchangeCombocopychan)
  143. ON_BN_CLICKED(IDCHANCFGOK, OnChancfgok)
  144. ON_BN_CLICKED(IDCHANCFGEXIT, OnChancfgexit)
  145. ON_BN_CLICKED(IDC_REMOTERECORD, OnRemoterecord)
  146. ON_BN_CLICKED(IDC_CHKMOTION, OnChkmotion)
  147. ON_BN_CLICKED(IDC_CHKHIDEALARM, OnChkhidealarm)
  148. ON_BN_CLICKED(IDC_BUTHIDEALARM, OnButhidealarm)
  149. ON_CBN_SELCHANGE(IDC_COMBOBITRATE, OnSelchangeCombobitrate)
  150. ON_BN_CLICKED(IDC_CHKVILOST, OnChkvilost)
  151. ON_BN_CLICKED(IDC_BUTVILOST, OnButvilost)
  152. ON_BN_CLICKED(IDC_BUTSTRING, OnButstring)
  153. ON_CBN_SELCHANGE(IDC_COMBOFRAMERATE, OnSelchangeComboframerate)
  154. ON_CBN_SELCHANGE(IDC_PARAMCOMBO, OnSelchangeParamcombo)
  155. ON_BN_CLICKED(IDC_COMPRESSOK, OnCompressok)
  156. //}}AFX_MSG_MAP
  157. END_MESSAGE_MAP()
  158. /////////////////////////////////////////////////////////////////////////////
  159. // CRemoteChannelConfig message handlers
  160. BOOL CRemoteChannelConfig::CheckPara()
  161. {
  162. CString sTemp;
  163. m_CopyChannelCtrl.ResetContent();
  164. m_ChannelCtrl.ResetContent();
  165. sTemp.Format(_T("全部通道"));
  166. m_CopyChannelCtrl.AddString(sTemp);
  167. char cTemp[100];
  168. m_nChanSel = 0;
  169. m_nCopyChanNum = -1;
  170. for(int i=0; i<m_iChannelnumber; i++)
  171. {
  172. sTemp.Format("通道%d", (m_lStartChannel+i));
  173. m_ChannelCtrl.AddString(sTemp);
  174. m_CopyChannelCtrl.AddString(sTemp);
  175. m_nChanNum = i+m_lStartChannel;
  176. bSetChannelPara[i] = FALSE;
  177. bGetChannelPara[i] = FALSE;
  178. bRemoteRecord[i] = FALSE;
  179. if(m_bConnectServer)
  180. {
  181. if(GetChanPara(i))
  182. {
  183. bGetChannelPara[i] = TRUE;
  184. }
  185. else
  186. {
  187. sTemp.Format("获取%d通道参数失败!",m_lStartChannel+i);
  188. MessageBox(sTemp, "温馨提示", MB_ICONINFORMATION);
  189. }
  190. }
  191. }
  192. m_ChannelCtrl.SetCurSel(m_nChanSel);
  193. m_CopyChannelCtrl.SetCurSel(m_nChanSel);
  194. m_nChanNum = m_nChanSel+m_lStartChannel;
  195. if(bGetChannelPara[m_nChanSel])
  196. {
  197. if((m_compressioncfg[m_nChanSel].struRecordPara.dwVideoBitrate >> 31) && 0x01)
  198. {
  199. GetDlgItem(IDC_EDITBITRATE)->EnableWindow(TRUE);
  200. m_BitRateCtrl.SetCurSel(22); //自定义码流
  201. m_BitRate = m_compressioncfg[m_nChanSel].struRecordPara.dwVideoBitrate & 0x7fffffff;
  202. }
  203. else
  204. {
  205. m_BitRateCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.dwVideoBitrate-2);
  206. m_BitRate = 0;
  207. GetDlgItem(IDC_EDITBITRATE)->EnableWindow(FALSE);
  208. }
  209. m_ResolutionCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byResolution);
  210. m_StreamTypeCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byStreamType);
  211. m_ImageQualityCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byPicQuality);
  212. m_BitRateTypeCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byBitrateType);
  213. m_FrameRateCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.dwVideoFrameRate);
  214. m_BPIntervalCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byIntervalBPFrame);
  215. m_FrameI = m_compressioncfg[m_nChanSel].struRecordPara.wIntervalFrameI;
  216. m_bRecord = m_record[m_nChanSel].dwRecord;
  217. GetDlgItem(IDC_BUTRECORD)->EnableWindow(m_bRecord);
  218. m_DelayCtrl.SetCurSel(m_record[m_nChanSel].dwRecordTime);
  219. m_PreRecordTime.SetCurSel(m_record[m_nChanSel].dwPreRecordTime);
  220. ZeroMemory(cTemp, 100);
  221. memcpy(cTemp, m_piccfg[m_nChanSel].sChanName, NAME_LEN);
  222. m_ChannelName.Format("%s",cTemp);
  223. m_bHide = m_piccfg[m_nChanSel].dwEnableHide;
  224. GetDlgItem(IDC_BUTHIDE)->EnableWindow(m_bHide);
  225. m_bMotion = m_piccfg[m_nChanSel].struMotion.byEnableHandleMotion;
  226. GetDlgItem(IDC_BUTMOTION)->EnableWindow(m_bMotion);
  227. if(m_piccfg[m_nChanSel].struHideAlarm.dwEnableHideAlarm > 0)
  228. {
  229. m_bHideAlarm = TRUE;
  230. }
  231. else
  232. {
  233. m_bHideAlarm = FALSE;
  234. }
  235. GetDlgItem(IDC_BUTHIDEALARM)->EnableWindow(m_bHideAlarm);
  236. m_bChanname = m_piccfg[m_nChanSel].dwShowChanName;
  237. m_channame_x = m_piccfg[m_nChanSel].wShowNameTopLeftX;
  238. m_channame_y = m_piccfg[m_nChanSel].wShowNameTopLeftY;
  239. m_bOsd = m_piccfg[m_nChanSel].dwShowOsd;
  240. m_osd_x = m_piccfg[m_nChanSel].wOSDTopLeftX;
  241. m_osd_y = m_piccfg[m_nChanSel].wOSDTopLeftY;
  242. m_bDispWeek = m_piccfg[m_nChanSel].byDispWeek;
  243. m_OsdAttrib.SetCurSel(m_piccfg[m_nChanSel].byOSDAttrib-1);
  244. m_OsdType.SetCurSel(m_piccfg[m_nChanSel].byOSDType);
  245. EnableChanname(m_bChanname);
  246. EnableOsd(m_bOsd);
  247. m_bVILost = m_piccfg[m_nChanSel].struVILost.byEnableHandleVILost;
  248. GetDlgItem(IDC_BUTVILOST)->EnableWindow(m_bVILost);
  249. GetDlgItem(IDCHANCFGOK)->EnableWindow(TRUE);
  250. }
  251. else
  252. {
  253. GetDlgItem(IDCHANCFGOK)->EnableWindow(FALSE);
  254. }
  255. m_ParamCombo.SetCurSel(0);
  256. UpdateData(FALSE);
  257. return TRUE;
  258. }
  259. BOOL CRemoteChannelConfig::OnInitDialog()
  260. {
  261. CDialog::OnInitDialog();
  262. // TODO: Add extra initialization here
  263. CRect rc(0, 0, 0, 0);
  264. GetParent()->GetClientRect(&rc);
  265. ((CTabCtrl*)GetParent())->AdjustRect(FALSE, &rc);
  266. MoveWindow(&rc);
  267. m_ParamCombo.ResetContent();
  268. m_ParamCombo.AddString("主码流(录像)");
  269. m_ParamCombo.AddString("子码流(网传)");
  270. if (serverinfo[m_iServer].m_dwDevSoftVersion >= 0x20001)
  271. {
  272. m_ParamCombo.AddString("事件触发");
  273. }
  274. m_ParamCombo.SetCurSel(0);
  275. m_iSelected = -1;
  276. if(m_pRemoteParam->m_dvrSelect != -1)
  277. {
  278. CheckPara();
  279. }
  280. return TRUE; // return TRUE unless you set the focus to a control
  281. // EXCEPTION: OCX Property Pages should return FALSE
  282. }
  283. BOOL CRemoteChannelConfig::GetChanPara(int nIndex)
  284. {
  285. DWORD dwReturned;
  286. memset(&m_piccfg[nIndex], 0, sizeof(m_piccfg[nIndex]));
  287. if(!NET_DVR_GetDVRConfig(m_lServerID, NET_DVR_GET_PICCFG_EX, m_nChanNum, &m_piccfg[nIndex], sizeof(NET_DVR_PICCFG_EX), &dwReturned))
  288. {
  289. CString sTemp;
  290. sTemp.Format("%d : NET_DVR_GET_PICCFG_EX = %d \n", m_nChanNum, NET_DVR_GetLastError());
  291. TRACE(sTemp);
  292. }
  293. memset(&m_compressioncfg[nIndex], 0, sizeof(m_compressioncfg[nIndex]));
  294. if(!NET_DVR_GetDVRConfig(m_lServerID, NET_DVR_GET_COMPRESSCFG_EX, m_nChanNum, &m_compressioncfg[nIndex], sizeof(NET_DVR_COMPRESSIONCFG_EX), &dwReturned))
  295. {
  296. CString sTemp;
  297. sTemp.Format("%d : ERROR: NET_DVR_GET_COMPRESSCFG_EX = %d \n", m_nChanNum, NET_DVR_GetLastError());
  298. TRACE(sTemp);
  299. }
  300. memset(&m_compressionNew[nIndex], 0, sizeof(m_compressionNew[nIndex]));
  301. if (serverinfo[m_iServer].m_dwDevSoftVersion >= 0x20001)
  302. {
  303. if(!NET_DVR_GetDVRConfig(m_lServerID, NET_DVR_GET_EVENTCOMPCFG, m_nChanNum, &m_compressionNew[nIndex], sizeof(NET_DVR_COMPRESSIONCFG), &dwReturned))
  304. {
  305. CString sTemp;
  306. sTemp.Format("%d : ERROR: NET_DVR_GET_EVENTCOMPCFG = %d \n", m_nChanNum, NET_DVR_GetLastError());
  307. TRACE(sTemp);
  308. }
  309. }
  310. memset(&m_record[nIndex], 0, sizeof(m_record[nIndex]));
  311. if(!NET_DVR_GetDVRConfig(m_lServerID, NET_DVR_GET_RECORDCFG, m_nChanNum, &m_record[nIndex], sizeof(NET_DVR_RECORD), &dwReturned))
  312. {
  313. CString sTemp;
  314. sTemp.Format("%d : ERROR: NET_DVR_GET_RECORDCFG = %d \n", m_nChanNum, NET_DVR_GetLastError());
  315. TRACE(sTemp);
  316. }
  317. return TRUE;
  318. }
  319. void CRemoteChannelConfig::OnButchancopy()
  320. {
  321. // TODO: Add your control notification handler code here
  322. UpdateData(TRUE);
  323. int nTemp = 0;
  324. if(m_nCopyChanNum == m_nChanSel)
  325. return;
  326. if(m_nCopyChanNum == -1)
  327. {
  328. for(int i=0; i<m_iChannelnumber; i++)
  329. {
  330. if(i == m_nChanSel)
  331. continue;
  332. switch(m_iSelected)
  333. {
  334. case 0:
  335. GetDlgItem(IDC_COMBOSTREAMTYPE)->EnableWindow(TRUE);
  336. GetDlgItem(IDC_COMBORESOLUTION)->EnableWindow(TRUE);
  337. GetDlgItem(IDC_EDITFRAMEI)->EnableWindow(TRUE);
  338. GetDlgItem(IDC_COMBOBPINTERVAL)->EnableWindow(TRUE);
  339. m_compressioncfg[i].struRecordPara.byStreamType = m_StreamTypeCtrl.GetCurSel();
  340. m_compressioncfg[i].struRecordPara.byPicQuality = m_ImageQualityCtrl.GetCurSel();
  341. if(m_BitRateCtrl.GetCurSel() == 22) //自定义码流 MIN-16K MAX-8192K
  342. {
  343. nTemp = m_BitRate;
  344. if(nTemp < 32*1024)
  345. nTemp = 32*1024;
  346. if(nTemp > 8192*1024)
  347. nTemp = 8192*1024;
  348. nTemp |= 0x80000000;
  349. m_compressioncfg[i].struRecordPara.dwVideoBitrate = nTemp;
  350. }
  351. else
  352. {
  353. m_compressioncfg[i].struRecordPara.dwVideoBitrate = m_BitRateCtrl.GetCurSel()+2;
  354. }
  355. m_compressioncfg[i].struRecordPara.byResolution = m_ResolutionCtrl.GetCurSel();
  356. m_compressioncfg[i].struRecordPara.dwVideoFrameRate = m_FrameRateCtrl.GetCurSel();
  357. m_compressioncfg[i].struRecordPara.byBitrateType = m_BitRateTypeCtrl.GetCurSel();
  358. m_compressioncfg[i].struRecordPara.byIntervalBPFrame = m_BPIntervalCtrl.GetCurSel();
  359. m_compressioncfg[i].struRecordPara.wIntervalFrameI = m_FrameI;
  360. break;
  361. //2005-07-08 双码流中的网传参数
  362. case 1:
  363. GetDlgItem(IDC_COMBOSTREAMTYPE)->EnableWindow(TRUE);
  364. GetDlgItem(IDC_COMBORESOLUTION)->EnableWindow(TRUE);
  365. GetDlgItem(IDC_EDITFRAMEI)->EnableWindow(TRUE);
  366. GetDlgItem(IDC_COMBOBPINTERVAL)->EnableWindow(TRUE);
  367. m_compressioncfg[i].struNetPara.byStreamType = m_StreamTypeCtrl.GetCurSel();
  368. m_compressioncfg[i].struNetPara.byPicQuality = m_ImageQualityCtrl.GetCurSel();
  369. if (m_BitRateCtrl.GetCurSel() == 22) //自定义码流 MIN-32K MAX-8192K
  370. {
  371. nTemp = m_BitRate;
  372. if (nTemp < 32*1024)
  373. nTemp = 32*1024;
  374. if (nTemp > 8192*1024)
  375. nTemp = 8192*1024;
  376. nTemp |= 0x80000000;
  377. m_compressioncfg[i].struNetPara.dwVideoBitrate = nTemp;
  378. }
  379. else
  380. {
  381. m_compressioncfg[i].struNetPara.dwVideoBitrate = m_BitRateCtrl.GetCurSel()+2;
  382. }
  383. m_compressioncfg[i].struNetPara.byResolution = m_ResolutionCtrl.GetCurSel()+1;
  384. m_compressioncfg[i].struNetPara.dwVideoFrameRate = m_FrameRateCtrl.GetCurSel();
  385. m_compressioncfg[i].struNetPara.byBitrateType = m_BitRateTypeCtrl.GetCurSel();
  386. m_compressioncfg[i].struNetPara.byIntervalBPFrame = m_BPIntervalCtrl.GetCurSel();
  387. m_compressioncfg[i].struNetPara.wIntervalFrameI = m_FrameI;
  388. break;
  389. case 2:
  390. GetDlgItem(IDC_COMBOSTREAMTYPE)->EnableWindow(FALSE);
  391. GetDlgItem(IDC_COMBORESOLUTION)->EnableWindow(FALSE);
  392. GetDlgItem(IDC_EDITFRAMEI)->EnableWindow(FALSE);
  393. GetDlgItem(IDC_COMBOBPINTERVAL)->EnableWindow(FALSE);
  394. m_compressionNew[i].struRecordPara.byStreamType = m_StreamTypeCtrl.GetCurSel();
  395. m_compressionNew[i].struRecordPara.byPicQuality = m_ImageQualityCtrl.GetCurSel();
  396. if(m_BitRateCtrl.GetCurSel() == 22) //自定义码流
  397. {
  398. nTemp = m_BitRate;
  399. if(nTemp < 32*1024)
  400. nTemp = 32*1024;
  401. if(nTemp > 8192*1024)
  402. nTemp = 8192*1024;
  403. nTemp |= 0x80000000;
  404. m_compressionNew[i].struRecordPara.dwVideoBitrate = nTemp;
  405. }
  406. else
  407. {
  408. m_compressionNew[i].struRecordPara.dwVideoBitrate = m_BitRateCtrl.GetCurSel()+2;
  409. }
  410. m_compressionNew[i].struRecordPara.byResolution = m_ResolutionCtrl.GetCurSel();
  411. m_compressionNew[i].struRecordPara.dwVideoFrameRate = m_FrameRateCtrl.GetCurSel();
  412. m_compressionNew[i].struRecordPara.byBitrateType = m_BitRateTypeCtrl.GetCurSel();
  413. break;
  414. default:
  415. break;
  416. }
  417. m_record[i].dwRecord = m_bRecord;
  418. m_record[i].dwRecordTime = m_DelayCtrl.GetCurSel();
  419. m_record[i].dwPreRecordTime = m_PreRecordTime.GetCurSel();
  420. //复制时间表
  421. for(int k=0; k<MAX_DAYS; k++)
  422. {
  423. memcpy(&(m_record[i].struRecAllDay[k]), &(m_record[m_nChanSel].struRecAllDay[k]), sizeof(NET_DVR_RECORDDAY));
  424. for(int j=0; j<MAX_TIMESEGMENT; j++)
  425. {
  426. memcpy(&m_record[i].struRecordSched[k][j],&m_record[m_nChanSel].struRecordSched[k][j],sizeof(NET_DVR_RECORDSCHED));
  427. }
  428. }
  429. m_piccfg[i].dwEnableHide = m_bHide;
  430. m_piccfg[i].struMotion.byEnableHandleMotion = m_bMotion;
  431. if(!m_bHideAlarm)
  432. {
  433. m_piccfg[i].struHideAlarm.dwEnableHideAlarm = m_bHideAlarm;
  434. }
  435. m_piccfg[i].dwShowChanName = m_bChanname;
  436. m_piccfg[i].wShowNameTopLeftX = m_channame_x;
  437. m_piccfg[i].wShowNameTopLeftY = m_channame_y;
  438. m_piccfg[i].dwShowOsd = m_bOsd;
  439. m_piccfg[i].wOSDTopLeftX = m_osd_x;
  440. m_piccfg[i].wOSDTopLeftY = m_osd_y;
  441. m_piccfg[i].byDispWeek = m_bDispWeek;
  442. m_piccfg[i].byOSDAttrib = m_OsdAttrib.GetCurSel()+1;
  443. m_piccfg[i].byOSDType = m_OsdType.GetCurSel();
  444. m_piccfg[i].struVILost.byEnableHandleVILost = m_bVILost;
  445. //复制视频参数
  446. m_piccfg[i].byBrightness = m_piccfg[m_nChanSel].byBrightness;
  447. m_piccfg[i].byContrast = m_piccfg[m_nChanSel].byContrast;
  448. m_piccfg[i].byHue = m_piccfg[m_nChanSel].byHue;
  449. m_piccfg[i].bySaturation = m_piccfg[m_nChanSel].bySaturation;
  450. bSetChannelPara[i] = TRUE;
  451. }
  452. }
  453. else
  454. {
  455. GetDlgItem(IDC_COMBOSTREAMTYPE)->EnableWindow(TRUE);
  456. GetDlgItem(IDC_COMBORESOLUTION)->EnableWindow(TRUE);
  457. GetDlgItem(IDC_EDITFRAMEI)->EnableWindow(TRUE);
  458. GetDlgItem(IDC_COMBOBPINTERVAL)->EnableWindow(TRUE);
  459. m_compressioncfg[m_nCopyChanNum].struRecordPara.byStreamType = m_StreamTypeCtrl.GetCurSel();
  460. m_compressioncfg[m_nCopyChanNum].struRecordPara.byPicQuality = m_ImageQualityCtrl.GetCurSel();
  461. if(m_BitRateCtrl.GetCurSel() == 22) //自定义码流
  462. {
  463. nTemp = m_BitRate;
  464. if(nTemp < 32*1024)
  465. nTemp = 32*1024;
  466. if(nTemp > 8192*1024)
  467. nTemp = 8192*1024;
  468. nTemp |= 0x80000000;
  469. m_compressioncfg[m_nCopyChanNum].struRecordPara.dwVideoBitrate = nTemp;
  470. }
  471. else
  472. {
  473. m_compressioncfg[m_nCopyChanNum].struRecordPara.dwVideoBitrate = m_BitRateCtrl.GetCurSel()+2;
  474. }
  475. m_compressioncfg[m_nCopyChanNum].struRecordPara.byResolution = m_ResolutionCtrl.GetCurSel();
  476. m_compressioncfg[m_nCopyChanNum].struRecordPara.dwVideoFrameRate = m_FrameRateCtrl.GetCurSel();
  477. m_compressioncfg[m_nCopyChanNum].struRecordPara.byBitrateType = m_BitRateTypeCtrl.GetCurSel();
  478. m_compressioncfg[m_nCopyChanNum].struRecordPara.byIntervalBPFrame = m_BPIntervalCtrl.GetCurSel();
  479. m_compressioncfg[m_nCopyChanNum].struRecordPara.wIntervalFrameI = m_FrameI;
  480. m_record[m_nCopyChanNum].dwRecord = m_bRecord;
  481. m_record[m_nCopyChanNum].dwRecordTime = m_DelayCtrl.GetCurSel();
  482. m_record[m_nCopyChanNum].dwPreRecordTime = m_PreRecordTime.GetCurSel();
  483. //复制时间表
  484. for(int k=0; k<MAX_DAYS; k++)
  485. {
  486. memcpy(&(m_record[m_nCopyChanNum].struRecAllDay[k]), &(m_record[m_nChanSel].struRecAllDay[k]), sizeof(NET_DVR_RECORDDAY));
  487. for(int j=0; j<MAX_TIMESEGMENT; j++)
  488. {
  489. memcpy(&m_record[m_nCopyChanNum].struRecordSched[k][j],&m_record[m_nChanSel].struRecordSched[k][j],sizeof(NET_DVR_RECORDSCHED));
  490. }
  491. }
  492. m_piccfg[m_nCopyChanNum].dwEnableHide = m_bHide;
  493. m_piccfg[m_nCopyChanNum].struMotion.byEnableHandleMotion = m_bMotion;
  494. if(!m_bHideAlarm)
  495. {
  496. m_piccfg[m_nCopyChanNum].struHideAlarm.dwEnableHideAlarm = m_bHideAlarm;
  497. }
  498. m_piccfg[m_nCopyChanNum].dwShowChanName = m_bChanname;
  499. m_piccfg[m_nCopyChanNum].wShowNameTopLeftX = m_channame_x;
  500. m_piccfg[m_nCopyChanNum].wShowNameTopLeftY = m_channame_y;
  501. m_piccfg[m_nCopyChanNum].dwShowOsd = m_bOsd;
  502. m_piccfg[m_nCopyChanNum].wOSDTopLeftX = m_osd_x;
  503. m_piccfg[m_nCopyChanNum].wOSDTopLeftY = m_osd_y;
  504. m_piccfg[m_nCopyChanNum].byDispWeek = m_bDispWeek;
  505. m_piccfg[m_nCopyChanNum].byOSDAttrib = m_OsdAttrib.GetCurSel()+1;
  506. m_piccfg[m_nCopyChanNum].byOSDType = m_OsdType.GetCurSel();
  507. m_piccfg[m_nCopyChanNum].struVILost.byEnableHandleVILost = m_bVILost;
  508. //复制视频参数
  509. m_piccfg[m_nCopyChanNum].byBrightness = m_piccfg[m_nChanSel].byBrightness;
  510. m_piccfg[m_nCopyChanNum].byContrast = m_piccfg[m_nChanSel].byContrast;
  511. m_piccfg[m_nCopyChanNum].byHue = m_piccfg[m_nChanSel].byHue;
  512. m_piccfg[m_nCopyChanNum].bySaturation = m_piccfg[m_nChanSel].bySaturation;
  513. bSetChannelPara[m_nCopyChanNum] = TRUE;
  514. }
  515. }
  516. void CRemoteChannelConfig::OnButmotion()
  517. {
  518. // TODO: Add your control notification handler code here
  519. CRemoteDetectConfig DetectCfgDlg;
  520. lpMotionDetect = &(m_piccfg[m_nChanSel].struMotion);
  521. DetectCfgDlg.m_iChannel = m_nChanNum;
  522. DetectCfgDlg.m_lServerID = m_lServerID;
  523. DetectCfgDlg.m_dwAlarmOutNum = m_dwAlarmOutNum;
  524. DetectCfgDlg.m_iChannelnumber = m_iChannelnumber;
  525. if(DetectCfgDlg.DoModal() == IDOK)
  526. bSetChannelPara[m_nChanSel] = TRUE;
  527. }
  528. void CRemoteChannelConfig::OnButrecord()
  529. {
  530. // TODO: Add your control notification handler code here
  531. CRemoteRecordPlanConfig dlg;
  532. dlg.serverrecordplan = &(m_record[m_nChanSel]);
  533. if(dlg.DoModal() == IDOK)
  534. bSetChannelPara[m_nChanSel] = TRUE;
  535. }
  536. void CRemoteChannelConfig::OnChkrecord()
  537. {
  538. if(m_pRemoteParam->m_dvrSelect == -1)
  539. return;
  540. // TODO: Add your control notification handler code here
  541. UpdateData(TRUE);
  542. if(m_bRecord)
  543. GetDlgItem(IDC_BUTRECORD)->EnableWindow(TRUE);
  544. else
  545. GetDlgItem(IDC_BUTRECORD)->EnableWindow(FALSE);
  546. }
  547. void CRemoteChannelConfig::OnButhide()
  548. {
  549. // TODO: Add your control notification handler code here
  550. CRemoteHideConfig Dlg;
  551. int i = 0;
  552. for(i=0; i<MAX_SHELTERNUM; i++)
  553. {
  554. memcpy(&(Dlg.struShelter[i]), &(m_piccfg[m_nChanSel].struShelter[i]),sizeof(NET_DVR_SHELTER));
  555. }
  556. Dlg.m_iChannel = m_nChanNum;
  557. Dlg.m_lServerID = m_lServerID;
  558. if(Dlg.DoModal() == IDOK)
  559. {
  560. for(i=0; i<MAX_SHELTERNUM; i++)
  561. {
  562. memcpy(&(m_piccfg[m_nChanSel].struShelter[i]), &(Dlg.struShelter[i]),sizeof(NET_DVR_SHELTER));
  563. }
  564. bSetChannelPara[m_nChanSel] = TRUE;
  565. }
  566. }
  567. void CRemoteChannelConfig::OnChkhidearea()
  568. {
  569. if(m_pRemoteParam->m_dvrSelect == -1)
  570. return;
  571. // TODO: Add your control notification handler code here
  572. UpdateData(TRUE);
  573. if(m_bHide)
  574. GetDlgItem(IDC_BUTHIDE)->EnableWindow(TRUE);
  575. else
  576. GetDlgItem(IDC_BUTHIDE)->EnableWindow(FALSE);
  577. }
  578. void CRemoteChannelConfig::OnChkosd()
  579. {
  580. // TODO: Add your control notification handler code here
  581. UpdateData(TRUE);
  582. EnableOsd(m_bOsd);
  583. }
  584. void CRemoteChannelConfig::OnChkchanname()
  585. {
  586. // TODO: Add your control notification handler code here
  587. UpdateData(TRUE);
  588. EnableChanname(m_bChanname);
  589. }
  590. void CRemoteChannelConfig::EnableOsd(BOOL bEnable)
  591. {
  592. // TODO: Add your control notification handler code here
  593. GetDlgItem(IDC_OSD_X)->EnableWindow(bEnable);
  594. GetDlgItem(IDC_OSD_Y)->EnableWindow(bEnable);
  595. GetDlgItem(IDC_OSDATTRIB)->EnableWindow(bEnable);
  596. GetDlgItem(IDC_OSDTYPE)->EnableWindow(bEnable);
  597. GetDlgItem(IDC_CHKDISPWEEK)->EnableWindow(bEnable);
  598. }
  599. void CRemoteChannelConfig::EnableChanname(BOOL bEnable)
  600. {
  601. // TODO: Add your control notification handler code here
  602. GetDlgItem(IDC_CHANNAME_X)->EnableWindow(bEnable);
  603. GetDlgItem(IDC_CHANNAME_Y)->EnableWindow(bEnable);
  604. }
  605. void CRemoteChannelConfig::OnSelchangeComchan()
  606. {
  607. // TODO: Add your control notification handler code here
  608. char cTemp[100];
  609. m_nChanSel = m_ChannelCtrl.GetCurSel();
  610. m_nChanNum = m_nChanSel+m_lStartChannel;
  611. if(!bGetChannelPara[m_nChanSel])
  612. {
  613. if(GetChanPara(m_nChanSel))
  614. {
  615. bGetChannelPara[m_nChanSel] = TRUE;
  616. }
  617. else
  618. {
  619. GetDlgItem(IDCHANCFGOK)->EnableWindow(FALSE);
  620. CString sTemp;
  621. sTemp.Format("获取%d通道参数失败!",m_nChanSel);
  622. MessageBox(sTemp, "温馨提示", MB_ICONINFORMATION);
  623. return;
  624. }
  625. }
  626. m_ParamCombo.SetCurSel(0);
  627. m_iSelected = 0;
  628. GetDlgItem(IDC_COMBOSTREAMTYPE)->EnableWindow(TRUE);
  629. GetDlgItem(IDC_COMBORESOLUTION)->EnableWindow(TRUE);
  630. GetDlgItem(IDC_EDITFRAMEI)->EnableWindow(TRUE);
  631. GetDlgItem(IDC_COMBOBPINTERVAL)->EnableWindow(TRUE);
  632. m_ResolutionCtrl.ResetContent();
  633. m_ResolutionCtrl.AddString("DCIF");
  634. m_ResolutionCtrl.AddString("CIF");
  635. m_ResolutionCtrl.AddString("QCIF");
  636. m_ResolutionCtrl.AddString("4CIF");
  637. m_ResolutionCtrl.AddString("2CIF");
  638. GetDlgItem(IDC_CHECKEVENT)->ShowWindow(SW_HIDE);
  639. if((m_compressioncfg[m_nChanSel].struRecordPara.dwVideoBitrate >> 31) && 0x01)
  640. {
  641. GetDlgItem(IDC_EDITBITRATE)->EnableWindow(TRUE);
  642. m_BitRateCtrl.SetCurSel(22); //自定义码流
  643. m_BitRate = m_compressioncfg[m_nChanSel].struRecordPara.dwVideoBitrate & 0x7fffffff;
  644. }
  645. else
  646. {
  647. m_BitRateCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.dwVideoBitrate-2);
  648. m_BitRate = 0;
  649. GetDlgItem(IDC_EDITBITRATE)->EnableWindow(FALSE);
  650. }
  651. m_ResolutionCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byResolution);
  652. m_StreamTypeCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byStreamType);
  653. m_ImageQualityCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byPicQuality);
  654. m_BitRateTypeCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byBitrateType);
  655. m_FrameRateCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.dwVideoFrameRate);
  656. m_BPIntervalCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byIntervalBPFrame);
  657. m_FrameI = m_compressioncfg[m_nChanSel].struRecordPara.wIntervalFrameI;
  658. m_bRecord = m_record[m_nChanSel].dwRecord;
  659. GetDlgItem(IDC_BUTRECORD)->EnableWindow(m_bRecord);
  660. m_DelayCtrl.SetCurSel(m_record[m_nChanSel].dwRecordTime);
  661. m_PreRecordTime.SetCurSel(m_record[m_nChanSel].dwPreRecordTime);
  662. ZeroMemory(cTemp, 100);
  663. memcpy(cTemp, m_piccfg[m_nChanSel].sChanName, NAME_LEN);
  664. m_ChannelName.Format("%s",cTemp);
  665. m_bHide = m_piccfg[m_nChanSel].dwEnableHide;
  666. GetDlgItem(IDC_BUTHIDE)->EnableWindow(m_bHide);
  667. m_bMotion = m_piccfg[m_nChanSel].struMotion.byEnableHandleMotion;
  668. GetDlgItem(IDC_BUTMOTION)->EnableWindow(m_bMotion);
  669. if(m_piccfg[m_nChanSel].struHideAlarm.dwEnableHideAlarm > 0)
  670. {
  671. m_bHideAlarm = TRUE;
  672. }
  673. else
  674. {
  675. m_bHideAlarm = FALSE;
  676. }
  677. GetDlgItem(IDC_BUTHIDEALARM)->EnableWindow(m_bHideAlarm);
  678. m_bChanname = m_piccfg[m_nChanSel].dwShowChanName;
  679. m_channame_x = m_piccfg[m_nChanSel].wShowNameTopLeftX;
  680. m_channame_y = m_piccfg[m_nChanSel].wShowNameTopLeftY;
  681. m_bOsd = m_piccfg[m_nChanSel].dwShowOsd;
  682. m_osd_x = m_piccfg[m_nChanSel].wOSDTopLeftX;
  683. m_osd_y = m_piccfg[m_nChanSel].wOSDTopLeftY;
  684. m_bDispWeek = m_piccfg[m_nChanSel].byDispWeek;
  685. m_OsdAttrib.SetCurSel(m_piccfg[m_nChanSel].byOSDAttrib-1);
  686. m_OsdType.SetCurSel(m_piccfg[m_nChanSel].byOSDType);
  687. m_bVILost = m_piccfg[m_nChanSel].struVILost.byEnableHandleVILost;
  688. GetDlgItem(IDC_BUTVILOST)->EnableWindow(m_bVILost);
  689. GetDlgItem(IDCHANCFGOK)->EnableWindow(TRUE);
  690. if(bRemoteRecord[m_nChanSel])
  691. {
  692. GetDlgItem(IDC_REMOTERECORD)->SetWindowText("停止录像");
  693. }
  694. else
  695. {
  696. GetDlgItem(IDC_REMOTERECORD)->SetWindowText("远程录像");
  697. }
  698. UpdateData(FALSE);
  699. }
  700. void CRemoteChannelConfig::OnSelchangeCombocopychan()
  701. {
  702. // TODO: Add your control notification handler code here
  703. m_nCopyChanNum = m_CopyChannelCtrl.GetCurSel() - 1;
  704. }
  705. void CRemoteChannelConfig::OnChancfgok()
  706. {
  707. if(m_pRemoteParam->m_dvrSelect == -1)
  708. return;
  709. // TODO: Add your control notification handler code here
  710. UpdateData(TRUE);
  711. memcpy(m_piccfg[m_nChanSel].sChanName, m_ChannelName, NAME_LEN);
  712. m_record[m_nChanSel].dwRecord = m_bRecord;
  713. m_record[m_nChanSel].dwRecordTime = m_DelayCtrl.GetCurSel();
  714. m_record[m_nChanSel].dwPreRecordTime = m_PreRecordTime.GetCurSel();
  715. m_piccfg[m_nChanSel].dwEnableHide = m_bHide;
  716. m_piccfg[m_nChanSel].struMotion.byEnableHandleMotion = m_bMotion;
  717. if(!m_bHideAlarm)
  718. {
  719. m_piccfg[m_nChanSel].struHideAlarm.dwEnableHideAlarm = m_bHideAlarm;
  720. }
  721. m_piccfg[m_nChanSel].dwShowChanName = m_bChanname;
  722. m_piccfg[m_nChanSel].wShowNameTopLeftX = m_channame_x;
  723. m_piccfg[m_nChanSel].wShowNameTopLeftY = m_channame_y;
  724. m_piccfg[m_nChanSel].dwShowOsd = m_bOsd;
  725. m_piccfg[m_nChanSel].wOSDTopLeftX = m_osd_x;
  726. m_piccfg[m_nChanSel].wOSDTopLeftY = m_osd_y;
  727. m_piccfg[m_nChanSel].byDispWeek = m_bDispWeek;
  728. m_piccfg[m_nChanSel].byOSDAttrib = m_OsdAttrib.GetCurSel()+1;
  729. m_piccfg[m_nChanSel].byOSDType = m_OsdType.GetCurSel();
  730. m_piccfg[m_nChanSel].struVILost.byEnableHandleVILost = m_bVILost;
  731. bSetChannelPara[m_nChanSel] = TRUE;
  732. GetDlgItem(IDC_BUTCHANCOPY)->EnableWindow(TRUE);
  733. }
  734. void CRemoteChannelConfig::OnChancfgexit()
  735. {
  736. // TODO: Add your control notification handler code here
  737. for(int i=0; i<m_iChannelnumber; i++)
  738. {
  739. bSetChannelPara[i] = FALSE;
  740. }
  741. }
  742. void CRemoteChannelConfig::OnCancel()
  743. {
  744. // TODO: Add extra cleanup here
  745. //CDialog::OnCancel();
  746. }
  747. void CRemoteChannelConfig::OnRemoterecord()
  748. {
  749. if(m_pRemoteParam->m_dvrSelect == -1)
  750. return;
  751. // TODO: Add your control notification handler code here
  752. //m_nChanSel = m_ChannelCtrl.GetCurSel();
  753. //m_nChanNum = m_nChanSel+m_lStartChannel;
  754. //if(!bRemoteRecord[m_nChanSel])
  755. //{
  756. // if(NET_DVR_StartDVRRecord(m_lServerID, m_nChanNum, 0))
  757. // {
  758. // GetDlgItem(IDC_REMOTERECORD)->SetWindowText("停止录像");
  759. // bRemoteRecord[m_nChanSel] = TRUE;
  760. // }
  761. //}
  762. //else
  763. {
  764. if(NET_DVR_StopDVRRecord(m_lServerID, m_nChanNum))
  765. {
  766. GetDlgItem(IDC_REMOTERECORD)->SetWindowText("远程录像");
  767. bRemoteRecord[m_nChanSel] = FALSE;
  768. }
  769. }
  770. }
  771. void CRemoteChannelConfig::OnChkmotion()
  772. {
  773. if(m_pRemoteParam->m_dvrSelect == -1)
  774. return;
  775. // TODO: Add your control notification handler code here
  776. UpdateData(TRUE);
  777. if(m_bMotion)
  778. GetDlgItem(IDC_BUTMOTION)->EnableWindow(TRUE);
  779. else
  780. GetDlgItem(IDC_BUTMOTION)->EnableWindow(FALSE);
  781. }
  782. void CRemoteChannelConfig::OnChkhidealarm()
  783. {
  784. if(m_pRemoteParam->m_dvrSelect == -1)
  785. return;
  786. // TODO: Add your control notification handler code here
  787. UpdateData(TRUE);
  788. if(m_bHideAlarm)
  789. GetDlgItem(IDC_BUTHIDEALARM)->EnableWindow(TRUE);
  790. else
  791. GetDlgItem(IDC_BUTHIDEALARM)->EnableWindow(FALSE);
  792. }
  793. void CRemoteChannelConfig::OnButhidealarm()
  794. {
  795. // TODO: Add your control notification handler code here
  796. CRemoteHideAlarm Dlg;
  797. lpHideAlarm = &(m_piccfg[m_nChanSel].struHideAlarm);
  798. Dlg.m_iChannel = m_nChanNum;
  799. Dlg.m_lServerID = m_lServerID;
  800. Dlg.m_dwAlarmOutNum = m_dwAlarmOutNum;
  801. if(Dlg.DoModal() == IDOK)
  802. {
  803. bSetChannelPara[m_nChanSel] = TRUE;
  804. }
  805. }
  806. void CRemoteChannelConfig::OnSelchangeCombobitrate()
  807. {
  808. // TODO: Add your control notification handler code here
  809. UpdateData(TRUE);
  810. if(m_BitRateCtrl.GetCurSel() == 22) //自定义码流
  811. {
  812. GetDlgItem(IDC_EDITBITRATE)->EnableWindow(TRUE);
  813. }
  814. else
  815. {
  816. GetDlgItem(IDC_EDITBITRATE)->EnableWindow(FALSE);
  817. }
  818. }
  819. void CRemoteChannelConfig::OnChkvilost()
  820. {
  821. if(m_pRemoteParam->m_dvrSelect == -1)
  822. return;
  823. // TODO: Add your control notification handler code here
  824. UpdateData(TRUE);
  825. GetDlgItem(IDC_BUTVILOST)->EnableWindow(m_bVILost);
  826. }
  827. void CRemoteChannelConfig::OnButvilost()
  828. {
  829. // TODO: Add your control notification handler code here
  830. CVideoLost Dlg;
  831. lpVILost = &(m_piccfg[m_nChanSel].struVILost);
  832. Dlg.m_iChannel = m_nChanNum;
  833. Dlg.m_lServerID = m_lServerID;
  834. Dlg.m_dwAlarmOutNum = m_dwAlarmOutNum;
  835. if(Dlg.DoModal() == IDOK)
  836. {
  837. bSetChannelPara[m_nChanSel] = TRUE;
  838. }
  839. }
  840. void CRemoteChannelConfig::OnButstring()
  841. {
  842. if(m_pRemoteParam->m_dvrSelect == -1)
  843. return;
  844. // TODO: Add your control notification handler code here
  845. CShowString Dlg;
  846. Dlg.m_lServerID = m_lServerID;
  847. Dlg.m_nChanNum = m_nChanNum;
  848. Dlg.DoModal();
  849. }
  850. void CRemoteChannelConfig::OnSelchangeComboframerate()
  851. {
  852. // TODO: Add your control notification handler code here
  853. UpdateData(TRUE);
  854. WORD temp = m_FrameRateCtrl.GetCurSel();
  855. m_FrameI = getFrameI(temp);
  856. UpdateData(FALSE);
  857. }
  858. void CRemoteChannelConfig::OnSelchangeParamcombo()
  859. {
  860. if(m_pRemoteParam->m_dvrSelect == -1)
  861. return;
  862. // TODO: Add your control notification handler code here
  863. int sel = m_ParamCombo.GetCurSel();
  864. if(m_iSelected == sel)
  865. return;
  866. m_iSelected = sel;
  867. m_ResolutionCtrl.ResetContent();
  868. m_ResolutionCtrl.AddString("DCIF");
  869. m_ResolutionCtrl.AddString("CIF");
  870. m_ResolutionCtrl.AddString("QCIF");
  871. m_ResolutionCtrl.AddString("4CIF");
  872. m_ResolutionCtrl.AddString("2CIF");
  873. GetDlgItem(IDC_CHECKEVENT)->ShowWindow(SW_HIDE);
  874. switch(m_iSelected)
  875. {
  876. case 0:
  877. GetDlgItem(IDC_COMBOSTREAMTYPE)->EnableWindow(TRUE);
  878. GetDlgItem(IDC_COMBORESOLUTION)->EnableWindow(TRUE);
  879. GetDlgItem(IDC_EDITFRAMEI)->EnableWindow(TRUE);
  880. GetDlgItem(IDC_COMBOBPINTERVAL)->EnableWindow(TRUE);
  881. if((m_compressioncfg[m_nChanSel].struRecordPara.dwVideoBitrate >> 31) && 0x01)
  882. {
  883. GetDlgItem(IDC_EDITBITRATE)->EnableWindow(TRUE);
  884. m_BitRateCtrl.SetCurSel(22); //自定义码流
  885. m_BitRate = m_compressioncfg[m_nChanSel].struRecordPara.dwVideoBitrate & 0x7fffffff;
  886. }
  887. else
  888. {
  889. m_BitRateCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.dwVideoBitrate-2);
  890. m_BitRate = 0;
  891. GetDlgItem(IDC_EDITBITRATE)->EnableWindow(FALSE);
  892. }
  893. m_ResolutionCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byResolution);
  894. m_StreamTypeCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byStreamType);
  895. m_ImageQualityCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byPicQuality);
  896. m_BitRateTypeCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byBitrateType);
  897. m_FrameRateCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.dwVideoFrameRate);
  898. m_BPIntervalCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byIntervalBPFrame);
  899. m_FrameI = m_compressioncfg[m_nChanSel].struRecordPara.wIntervalFrameI;
  900. break;
  901. case 1:
  902. m_ResolutionCtrl.ResetContent();
  903. m_ResolutionCtrl.AddString("CIF");
  904. m_ResolutionCtrl.AddString("QCIF");
  905. GetDlgItem(IDC_COMBOSTREAMTYPE)->EnableWindow(TRUE);
  906. GetDlgItem(IDC_COMBORESOLUTION)->EnableWindow(TRUE);
  907. GetDlgItem(IDC_EDITFRAMEI)->EnableWindow(TRUE);
  908. GetDlgItem(IDC_COMBOBPINTERVAL)->EnableWindow(TRUE);
  909. if ((m_compressioncfg[m_nChanSel].struNetPara.dwVideoBitrate >> 31) && 0x01)
  910. {
  911. GetDlgItem(IDC_EDITBITRATE)->EnableWindow(TRUE);
  912. m_BitRateCtrl.SetCurSel(22); //自定义码流
  913. m_BitRate = m_compressioncfg[m_nChanSel].struNetPara.dwVideoBitrate & 0x7fffffff;
  914. }
  915. else
  916. {
  917. m_BitRateCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struNetPara.dwVideoBitrate-2);
  918. m_BitRate = 0;
  919. GetDlgItem(IDC_EDITBITRATE)->EnableWindow(FALSE);
  920. }
  921. m_ResolutionCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struNetPara.byResolution-1);
  922. m_StreamTypeCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struNetPara.byStreamType);
  923. m_ImageQualityCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struNetPara.byPicQuality);
  924. m_BitRateTypeCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struNetPara.byBitrateType);
  925. m_FrameRateCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struNetPara.dwVideoFrameRate);
  926. m_BPIntervalCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struNetPara.byIntervalBPFrame);
  927. m_FrameI = m_compressioncfg[m_nChanSel].struNetPara.wIntervalFrameI;
  928. break;
  929. case 2:
  930. GetDlgItem(IDC_CHECKEVENT)->ShowWindow(SW_SHOW);
  931. GetDlgItem(IDC_COMBOSTREAMTYPE)->EnableWindow(FALSE);
  932. GetDlgItem(IDC_COMBORESOLUTION)->EnableWindow(FALSE);
  933. GetDlgItem(IDC_EDITFRAMEI)->EnableWindow(FALSE);
  934. GetDlgItem(IDC_COMBOBPINTERVAL)->EnableWindow(FALSE);
  935. if((m_compressionNew[m_nChanSel].struRecordPara.dwVideoBitrate >> 31) && 0x01)
  936. {
  937. GetDlgItem(IDC_EDITBITRATE)->EnableWindow(TRUE);
  938. m_BitRateCtrl.SetCurSel(22); //自定义码流
  939. m_BitRate = m_compressionNew[m_nChanSel].struRecordPara.dwVideoBitrate & 0x7fffffff;
  940. }
  941. else
  942. {
  943. m_BitRateCtrl.SetCurSel(m_compressionNew[m_nChanSel].struRecordPara.dwVideoBitrate-2);
  944. m_BitRate = 0;
  945. GetDlgItem(IDC_EDITBITRATE)->EnableWindow(FALSE);
  946. }
  947. m_ResolutionCtrl.SetCurSel(m_compressionNew[m_nChanSel].struRecordPara.byResolution);
  948. //2008-03-31 码流类型的最高位用来表示是否事件触发参数是即时生效的
  949. if (m_compressionNew[m_nChanSel].struRecordPara.byStreamType & 0x80)
  950. {
  951. m_bUseEvent = TRUE;
  952. m_compressionNew[m_nChanSel].struRecordPara.byStreamType &= 0x7f;
  953. }
  954. m_StreamTypeCtrl.SetCurSel(m_compressionNew[m_nChanSel].struRecordPara.byStreamType);
  955. m_ImageQualityCtrl.SetCurSel(m_compressionNew[m_nChanSel].struRecordPara.byPicQuality);
  956. m_BitRateTypeCtrl.SetCurSel(m_compressionNew[m_nChanSel].struRecordPara.byBitrateType);
  957. m_FrameRateCtrl.SetCurSel(m_compressionNew[m_nChanSel].struRecordPara.dwVideoFrameRate);
  958. break;
  959. default:
  960. break;
  961. }
  962. UpdateData(FALSE);
  963. }
  964. void CRemoteChannelConfig::OnCompressok()
  965. {
  966. int nTemp = 0;
  967. // TODO: Add your control notification handler code here
  968. UpdateData(TRUE);
  969. int sel = m_ParamCombo.GetCurSel();
  970. m_iSelected = sel;
  971. switch(m_iSelected)
  972. {
  973. case 0:
  974. GetDlgItem(IDC_COMBOSTREAMTYPE)->EnableWindow(TRUE);
  975. GetDlgItem(IDC_COMBORESOLUTION)->EnableWindow(TRUE);
  976. GetDlgItem(IDC_EDITFRAMEI)->EnableWindow(TRUE);
  977. GetDlgItem(IDC_COMBOBPINTERVAL)->EnableWindow(TRUE);
  978. m_compressioncfg[m_nChanSel].struRecordPara.byStreamType = m_StreamTypeCtrl.GetCurSel();
  979. m_compressioncfg[m_nChanSel].struRecordPara.byPicQuality = m_ImageQualityCtrl.GetCurSel();
  980. if(m_BitRateCtrl.GetCurSel() == 22) //自定义码流
  981. {
  982. nTemp = m_BitRate;
  983. if(nTemp < 32*1024)
  984. nTemp = 32*1024;
  985. if(nTemp > 8192*1024)
  986. nTemp = 8192*1024;
  987. nTemp |= 0x80000000;
  988. m_compressioncfg[m_nChanSel].struRecordPara.dwVideoBitrate = nTemp;
  989. }
  990. else
  991. {
  992. m_compressioncfg[m_nChanSel].struRecordPara.dwVideoBitrate = m_BitRateCtrl.GetCurSel()+2;
  993. }
  994. m_compressioncfg[m_nChanSel].struRecordPara.byResolution = m_ResolutionCtrl.GetCurSel();
  995. m_compressioncfg[m_nChanSel].struRecordPara.dwVideoFrameRate = m_FrameRateCtrl.GetCurSel();
  996. m_compressioncfg[m_nChanSel].struRecordPara.byBitrateType = m_BitRateTypeCtrl.GetCurSel();
  997. m_compressioncfg[m_nChanSel].struRecordPara.byIntervalBPFrame = m_BPIntervalCtrl.GetCurSel();
  998. m_compressioncfg[m_nChanSel].struRecordPara.wIntervalFrameI = m_FrameI;
  999. break;
  1000. case 1:
  1001. GetDlgItem(IDC_COMBOSTREAMTYPE)->EnableWindow(TRUE);
  1002. GetDlgItem(IDC_COMBORESOLUTION)->EnableWindow(TRUE);
  1003. GetDlgItem(IDC_EDITFRAMEI)->EnableWindow(TRUE);
  1004. GetDlgItem(IDC_COMBOBPINTERVAL)->EnableWindow(TRUE);
  1005. m_compressioncfg[m_nChanSel].struNetPara.byStreamType = m_StreamTypeCtrl.GetCurSel();
  1006. m_compressioncfg[m_nChanSel].struNetPara.byPicQuality = m_ImageQualityCtrl.GetCurSel();
  1007. if (m_BitRateCtrl.GetCurSel() == 22) //自定义码流
  1008. {
  1009. nTemp = m_BitRate;
  1010. if (nTemp < 32*1024)
  1011. nTemp = 32*1024;
  1012. if (nTemp > 8192*1024)
  1013. nTemp = 8192*1024;
  1014. nTemp |= 0x80000000;
  1015. m_compressioncfg[m_nChanSel].struNetPara.dwVideoBitrate = nTemp;
  1016. }
  1017. else
  1018. {
  1019. m_compressioncfg[m_nChanSel].struNetPara.dwVideoBitrate = m_BitRateCtrl.GetCurSel()+2;
  1020. }
  1021. m_compressioncfg[m_nChanSel].struNetPara.byResolution = m_ResolutionCtrl.GetCurSel()+1;
  1022. m_compressioncfg[m_nChanSel].struNetPara.dwVideoFrameRate = m_FrameRateCtrl.GetCurSel();
  1023. m_compressioncfg[m_nChanSel].struNetPara.byBitrateType = m_BitRateTypeCtrl.GetCurSel();
  1024. m_compressioncfg[m_nChanSel].struNetPara.byIntervalBPFrame = m_BPIntervalCtrl.GetCurSel();
  1025. m_compressioncfg[m_nChanSel].struNetPara.wIntervalFrameI = m_FrameI;
  1026. break;
  1027. case 2:
  1028. GetDlgItem(IDC_COMBOSTREAMTYPE)->EnableWindow(FALSE);
  1029. GetDlgItem(IDC_COMBORESOLUTION)->EnableWindow(FALSE);
  1030. GetDlgItem(IDC_EDITFRAMEI)->EnableWindow(FALSE);
  1031. GetDlgItem(IDC_COMBOBPINTERVAL)->EnableWindow(FALSE);
  1032. m_compressionNew[m_nChanSel].struRecordPara.byStreamType = m_StreamTypeCtrl.GetCurSel();
  1033. //2008-03-31 码流类型的最高位用来表示事件触发参数是否设置后即生效
  1034. if (m_bUseEvent)
  1035. {
  1036. m_compressionNew[m_nChanSel].struRecordPara.byStreamType |= 0x80;
  1037. }
  1038. m_compressionNew[m_nChanSel].struRecordPara.byPicQuality = m_ImageQualityCtrl.GetCurSel();
  1039. if(m_BitRateCtrl.GetCurSel() == 22) //自定义码流
  1040. {
  1041. nTemp = m_BitRate;
  1042. if(nTemp < 32*1024)
  1043. nTemp = 32*1024;
  1044. if(nTemp > 8192*1024)
  1045. nTemp = 8192*1024;
  1046. nTemp |= 0x80000000;
  1047. m_compressionNew[m_nChanSel].struRecordPara.dwVideoBitrate = nTemp;
  1048. }
  1049. else
  1050. {
  1051. m_compressionNew[m_nChanSel].struRecordPara.dwVideoBitrate = m_BitRateCtrl.GetCurSel()+2;
  1052. }
  1053. m_compressionNew[m_nChanSel].struRecordPara.byResolution = m_ResolutionCtrl.GetCurSel();
  1054. m_compressionNew[m_nChanSel].struRecordPara.dwVideoFrameRate = m_FrameRateCtrl.GetCurSel();
  1055. m_compressionNew[m_nChanSel].struRecordPara.byBitrateType = m_BitRateTypeCtrl.GetCurSel();
  1056. break;
  1057. default:
  1058. break;
  1059. }
  1060. bSetChannelPara[m_nChanSel] = TRUE;
  1061. }