// newclientDlg.cpp : implementation file // #include "stdafx.h" #include "newclient.h" #include "newclientDlg.h" #include "MyOutput.h" #include "Curwin.h" #include "EventLog.h" #include "VoiceExchange.h" #include "SetAlarm.h" #include "PlayBack.h" #include "SystemConfig.h" #include "DecodeCardSDK.h" #include "SYS\TIMEB.H" #include "GetCapture.h" #include "CruiseRoute.h" #include ".\newclientdlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define WM_MYCOMMAND WM_USER+1 //for sdk CLIENTPARAM ClientParam; SERVER_INFO serverinfo[MAXIPNUMBER]; IP_INFO allipinfo[MAXIPNUMBER][MAXCHANNUM]; IP_INFO selipinfo[MAXNUMBER]; ALARM_INFO alarminfo[MAXALARMIN]; int iSurveillanceNumber; CMyOutput myoutput[MAXVIEWNUM]; CGetCapture getpic; CCurwin mycurwin; char cWorkDir[256]; BOOL bLargeWnd = FALSE; //播放窗口是否在放大,如果是放大的窗口,则关闭该窗口时,恢复到原来多窗口画面; WORD numberpos = 0; HBRUSH hBrush; extern WORD iActiveWndNumber; extern LONG lVoiceIndex; extern void ReadSurveillanceConfig(); extern void ReadClientConfig(); extern void F_AddEvent(CString csEvent); int MYVIEW_LEFT = 20; int MYVIEW_TOP = 20; HANDLE hVideoBeeper; //报警事件 HANDLE hBeepThread; //报警线程 extern int nUseCard; CNewclientDlg *MainDlg; BOOL g_bShareSound = FALSE; int g_nNetDelay = 2; BOOL g_bPTZStart = FALSE; int g_nPTZUP = 0; int g_nPTZNum = 0; DWORD runTimes = 0; const int interval = 5000; DWORD g_dwTime1 = 0; DWORD g_dwTime2 = 0; DWORD g_dwThread = 0; UINT Beeper(LPVOID pParam) { while(true) { Beep(800,500); Beep(1000,500); Beep(800,500); Beep(1000,500); if(WaitForSingleObject(hVideoBeeper,1000) == WAIT_OBJECT_0) { ResetEvent(hVideoBeeper); hBeepThread = NULL; return FALSE; } } return TRUE; } int CALLBACK MessageCallback2(LONG lCommand,char *sDVRIP,char *pBuf,DWORD dwBufLen) { return 0; } int CALLBACK MessageCallback3(LONG lCommand,LONG lUserID,char *pBuf,DWORD dwBufLen) { return 0; } int CALLBACK MessageCallback4(LONG lCommand,char *sDVRIP,char *pBuf,DWORD dwBufLen, DWORD dwUser) { return 0; } //消息回调处理函数 int CALLBACK MessageCallback(LONG lCommand,char *sDVRIP,char *pBuf,DWORD dwBufLen,WORD dwLinkDVRPort) { CString csTemp; int i = 0; BOOL bDisk = FALSE; csTemp.Format("dwLinkDVRPor[%d]", dwLinkDVRPort); TRACE(csTemp); csTemp.Format("%s", sDVRIP); for(i=0; i= 0) { MainDlg->m_pAlarmLed[i]->SetLed(CLed::LED_COLOR_RED,CLed::LED_ON,CLed::LED_ROUND); } else { MainDlg->m_pAlarmLed[i]->SetLed(CLed::LED_COLOR_RED,CLed::LED_DISABLED,CLed::LED_ROUND); } } break; case COMM_TRADEINFO: NET_DVR_TRADEINFO m_TradeInfo; memcpy(&m_TradeInfo, pBuf, sizeof(NET_DVR_TRADEINFO)); csTemp.Format("服务器%s收到卡号信息%s ", sDVRIP, m_TradeInfo.CardNumber); F_AddEvent(csTemp); TRACE(csTemp); break; default: break; } return 0; } ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) // No message handlers //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CNewclientDlg dialog CNewclientDlg::CNewclientDlg(CWnd* pParent /*=NULL*/) : CDialog(CNewclientDlg::IDD, pParent) { //{{AFX_DATA_INIT(CNewclientDlg) m_yzd = 0; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CNewclientDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CNewclientDlg) DDX_Control(pDX, IDC_COMBONETDELAY, m_NetDelayCtrl); DDX_Control(pDX, IDC_ALARMLED9, m_AlarmLed9); DDX_Control(pDX, IDC_ALARMLED8, m_AlarmLed8); DDX_Control(pDX, IDC_ALARMLED7, m_AlarmLed7); DDX_Control(pDX, IDC_ALARMLED6, m_AlarmLed6); DDX_Control(pDX, IDC_ALARMLED5, m_AlarmLed5); DDX_Control(pDX, IDC_ALARMLED4, m_AlarmLed4); DDX_Control(pDX, IDC_ALARMLED3, m_AlarmLed3); DDX_Control(pDX, IDC_ALARMLED2, m_AlarmLed2); DDX_Control(pDX, IDC_ALARMLED16, m_AlarmLed16); DDX_Control(pDX, IDC_ALARMLED15, m_AlarmLed15); DDX_Control(pDX, IDC_ALARMLED14, m_AlarmLed14); DDX_Control(pDX, IDC_ALARMLED13, m_AlarmLed13); DDX_Control(pDX, IDC_ALARMLED12, m_AlarmLed12); DDX_Control(pDX, IDC_ALARMLED11, m_AlarmLed11); DDX_Control(pDX, IDC_ALARMLED10, m_AlarmLed10); DDX_Control(pDX, IDC_ALARMLED1, m_AlarmLed1); DDX_Control(pDX, IDC_LED9, m_CapLed9); DDX_Control(pDX, IDC_LED8, m_CapLed8); DDX_Control(pDX, IDC_LED7, m_CapLed7); DDX_Control(pDX, IDC_LED6, m_CapLed6); DDX_Control(pDX, IDC_LED5, m_CapLed5); DDX_Control(pDX, IDC_LED4, m_CapLed4); DDX_Control(pDX, IDC_LED3, m_CapLed3); DDX_Control(pDX, IDC_LED2, m_CapLed2); DDX_Control(pDX, IDC_LED16, m_CapLed16); DDX_Control(pDX, IDC_LED15, m_CapLed15); DDX_Control(pDX, IDC_LED14, m_CapLed14); DDX_Control(pDX, IDC_LED13, m_CapLed13); DDX_Control(pDX, IDC_LED12, m_CapLed12); DDX_Control(pDX, IDC_LED11, m_CapLed11); DDX_Control(pDX, IDC_LED10, m_CapLed10); DDX_Control(pDX, IDC_LED1, m_CapLed1); DDX_Control(pDX, IDC_COMBOWNDNUM, m_windownum); DDX_Control(pDX, IDC_SLIDERYL, m_yl); DDX_Control(pDX, IDC_SLIDERSD, m_sd); DDX_Control(pDX, IDC_SLIDERLD, m_ld); DDX_Control(pDX, IDC_SLIDERDBD, m_dbd); DDX_Control(pDX, IDC_SLIDERBHD, m_bhd); DDX_Text(pDX, IDC_YZD, m_yzd); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CNewclientDlg, CDialog) //{{AFX_MSG_MAP(CNewclientDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_EXIT, OnExit) ON_BN_CLICKED(IDC_AUDIOEXCHANGE, OnAudioexchange) ON_BN_CLICKED(IDC_SYSTEMCFG, OnSystemcfg) ON_BN_CLICKED(IDC_PLAY, OnVideonetplay) ON_BN_CLICKED(IDC_GETPICTURE, OnGetpicture) ON_BN_CLICKED(IDC_RECORD, OnRecord) ON_BN_CLICKED(IDC_EVENTLIST, OnEventlist) ON_BN_CLICKED(IDC_BUTTONALARMSET, OnButtonalarmset) ON_BN_CLICKED(IDC_VIDEOFILEPLAY, OnVideofileplay) ON_WM_TIMER() ON_WM_HSCROLL() ON_BN_CLICKED(IDC_BUTTONPOLL, OnButtonpoll) ON_BN_CLICKED(IDC_BUTTONYZW, OnButtonyzw) ON_CBN_SELCHANGE(IDC_COMBOWNDNUM, OnSelchangeCombowndnum) ON_CBN_SELCHANGE(IDC_COMBONETDELAY, OnSelchangeCombonetdelay) ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_WM_MOVE() ON_BN_CLICKED(IDC_BUTTON2, OnButton2) ON_MESSAGE(WM_MYCOMMAND,OnMyCommand) ON_BN_CLICKED(IDC_CRUISE, OnCruise) //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_BUTTONUP, OnBnClickedButtonup) ON_BN_CLICKED(IDC_BUTTONDOWN, OnBnClickedButtondown) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// //wParam: 消息类型 lParam: 发生异常的索引值。 LRESULT CNewclientDlg::OnMyCommand(WPARAM wParam, LPARAM lParam) { char tempbuf[256]; int i = 0; DWORD dwType = wParam; //异常类型 LONG lIndex = lParam; //相对应得操作返回的句柄 ZeroMemory(tempbuf,256); switch(dwType) { case EXCEPTION_AUDIOEXCHANGE: //语音对讲时网络异常 sprintf(tempbuf,"语音对讲时网络异常!!!"); TRACE("%s",tempbuf); if(lVoiceIndex != -1) { if(lIndex == lVoiceIndex) { if(NET_DVR_StopVoiceCom(lVoiceIndex)) { GetDlgItem(IDC_AUDIOEXCHANGE)->SetWindowText("语音对讲"); lVoiceIndex = -1; } else { AfxMessageBox("停止语音对讲失败!"); } } } break; case EXCEPTION_ALARM: //报警上传时网络异常 sprintf(tempbuf,"报警上传时网络异常!!!"); TRACE("%s",tempbuf); for(i = 0; i < MAXIPNUMBER; i++) { if(ClientParam.m_iAlarmHandle[i] >= 0) { if(lIndex == ClientParam.m_iAlarmHandle[i]) { if(NET_DVR_CloseAlarmChan(ClientParam.m_iAlarmHandle[i])) { ClientParam.m_iAlarmHandle[i] = -1; } else { CString sTemp; sTemp.Format("%s报警撤防失败!",serverinfo[i].m_csServerName); AfxMessageBox(sTemp); } m_pAlarmLed[i]->SetLed(CLed::LED_COLOR_GREEN,CLed::LED_DISABLED,CLed::LED_ROUND); } } } break; case EXCEPTION_PREVIEW: //网络预览时异常 sprintf(tempbuf,"网络预览时网络异常!!!"); TRACE("%s",tempbuf); if(ClientParam.m_bPlaying) { for(i = 0; i < MAXVIEWNUM; i++) { if(lIndex == myoutput[i].m_iPlayhandle) { if(myoutput[i].m_bFileSave) { F_StopClientRecord(i); } myoutput[i].StopNet(); } } } break; case EXCEPTION_SERIAL: //透明通道传输时异常 sprintf(tempbuf,"透明通道传输时网络异常!!!"); TRACE("%s",tempbuf); //TODO: 关闭透明通道 break; case EXCEPTION_RECONNECT: //预览的时候重连 sprintf(tempbuf,"预览时网络重连!!!"); TRACE("%s",tempbuf); break; default: break; } return 0L; } // CNewclientDlg message handlers BOOL CNewclientDlg::OnInitDialog() { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon TRACE("\nCurrent SDK Version is 0x%08x\n", NET_DVR_GetSDKBuildVersion()); // TODO: Add extra initialization here int i,j; CString sTemp; NET_DVR_DEVICEINFO DeviceInfo; LONG lUserID = 0; char csServerIP[16]; char cUserName[100]; char cPassword[100]; BOOL bLogin = FALSE; char cTemp[100]; DWORD dwReturned = 0; m_PTZTesttimer = 0; nUseCard =0; m_byException = 0; hBrush=::CreateSolidBrush(COLORREF(0xff0000)); ZeroMemory(cWorkDir, 256); GetCurrentDirectory(256, cWorkDir); TRACE("cWordDir = %s", cWorkDir); CNewclientApp* pApp = (CNewclientApp*)AfxGetApp(); m_iHardDriverNum = pApp->m_iDriverNum; for(i = 0; i < m_iHardDriverNum; i++) { m_cHardDriver[i] = pApp->m_cHardDriver[i]; } ClientParam.m_bCheckServerTime = FALSE; ClientParam.m_iCheckServerTime = 0; for(i = 0; i < MAXIPNUMBER; i++) { serverinfo[i].m_csServerName.Format(_T("")); serverinfo[i].m_iServerChannelNumber = -1; serverinfo[i].m_wServerPort = 8000; serverinfo[i].m_lServerID = -1; serverinfo[i].m_dwDevSoftVersion = 0; for(j = 0; j < MAXCHANNUM; j++) { allipinfo[i][j].m_lServerID = -1; allipinfo[i][j].m_iChannel = -1; allipinfo[i][j].m_iServerNum = -1; allipinfo[i][j].m_iChannelNum = -1; allipinfo[i][j].m_wServerport = 8000; allipinfo[i][j].m_bChoosed = FALSE; allipinfo[i][j].m_iSequence = -1; } } for(i=0; i<10; i++) { cTemp[i] = i; } ReadSurveillanceConfig(); for(i=0; i= 0) { strcpy(csServerIP, serverinfo[i].m_csServerIP); strncpy(cUserName, serverinfo[i].m_csServerAdminName, MAX_NAMELEN); strncpy(cPassword, serverinfo[i].m_csServerAdminPasswd, PASSWD_LEN); lUserID = NET_DVR_Login(csServerIP, serverinfo[i].m_wServerPort, cUserName, cPassword, &DeviceInfo); if(lUserID < 0) { CString sTemp; int nErr = NET_DVR_GetLastError(); if(nErr == NET_DVR_PASSWORD_ERROR) { sTemp.Format("%s 用户名密码错误! ", csServerIP); TRACE(sTemp); AfxMessageBox(sTemp); } //TODO: 其他错误值 else { sTemp.Format("%s 由于网络原因或DVR忙, 注册失败! ", csServerIP); TRACE(sTemp); AfxMessageBox(sTemp); } } else { NET_DVR_DEVICECFG DeviceCfg; if (!NET_DVR_GetDVRConfig(lUserID, NET_DVR_GET_DEVICECFG, 0, &DeviceCfg, sizeof(DeviceCfg), &dwReturned)) { sTemp.Format("%s 获取设备参数失败! ", csServerIP); TRACE(sTemp); AfxMessageBox(sTemp); } else { serverinfo[i].m_dwDevSoftVersion = DeviceCfg.dwSoftwareVersion; } bLogin = TRUE; serverinfo[i].m_lServerID = lUserID; serverinfo[i].m_wServerType = DeviceInfo.byDVRType; serverinfo[i].m_lStartChannel = DeviceInfo.byStartChan; serverinfo[i].m_dwAlarmInNum = DeviceInfo.byAlarmInPortNum; serverinfo[i].m_dwAlarmOutNum = DeviceInfo.byAlarmOutPortNum; serverinfo[i].m_iServerChannelNumber = DeviceInfo.byChanNum; serverinfo[i].m_dwDiskNum = DeviceInfo.byDiskNum; ZeroMemory(cTemp, 100); memcpy(cTemp, DeviceInfo.sSerialNumber, SERIALNO_LEN); serverinfo[i].m_csSerialNumber.Format("%s", cTemp); for(j = 0; j < MAXCHANNUM; j++) { if(j < DeviceInfo.byChanNum) { allipinfo[i][j].m_lServerID = lUserID; allipinfo[i][j].m_csChanName.Format("通道%d",(j+DeviceInfo.byStartChan)); allipinfo[i][j].m_iChannel = j+DeviceInfo.byStartChan; if( (allipinfo[i][j].m_bChoosed) && (allipinfo[i][j].m_iSequence != -1) ) { selipinfo[allipinfo[i][j].m_iSequence].m_bChoosed = allipinfo[i][j].m_bChoosed; selipinfo[allipinfo[i][j].m_iSequence].m_csChanName = allipinfo[i][j].m_csChanName; selipinfo[allipinfo[i][j].m_iSequence].m_csIP = allipinfo[i][j].m_csIP; selipinfo[allipinfo[i][j].m_iSequence].m_csMultiIP = allipinfo[i][j].m_csMultiIP; selipinfo[allipinfo[i][j].m_iSequence].m_csPassword = allipinfo[i][j].m_csPassword; selipinfo[allipinfo[i][j].m_iSequence].m_csUser = allipinfo[i][j].m_csUser; selipinfo[allipinfo[i][j].m_iSequence].m_dwAddress = allipinfo[i][j].m_dwAddress; selipinfo[allipinfo[i][j].m_iSequence].m_dwAlarmlevel = allipinfo[i][j].m_dwAlarmlevel; selipinfo[allipinfo[i][j].m_iSequence].m_dwIPvalue = allipinfo[i][j].m_dwIPvalue; selipinfo[allipinfo[i][j].m_iSequence].m_dwMultiIPvalue = allipinfo[i][j].m_dwMultiIPvalue; selipinfo[allipinfo[i][j].m_iSequence].m_dwProtocol = allipinfo[i][j].m_dwProtocol; selipinfo[allipinfo[i][j].m_iSequence].m_iChannel = allipinfo[i][j].m_iChannel; selipinfo[allipinfo[i][j].m_iSequence].m_iSequence = allipinfo[i][j].m_iSequence; selipinfo[allipinfo[i][j].m_iSequence].m_lServerID = allipinfo[i][j].m_lServerID; selipinfo[allipinfo[i][j].m_iSequence].m_wJMQtype = allipinfo[i][j].m_wJMQtype; selipinfo[allipinfo[i][j].m_iSequence].m_wServerport = allipinfo[i][j].m_wServerport; selipinfo[allipinfo[i][j].m_iSequence].m_iServerNum = i; selipinfo[allipinfo[i][j].m_iSequence].m_iChannelNum = j; iSurveillanceNumber++; //TRACE("m_iSequence = %d csServerIP = %s m_lServerID = %d", allipinfo[i][j].m_iSequence, selipinfo[allipinfo[i][j].m_iSequence].m_csIP, selipinfo[allipinfo[i][j].m_iSequence].m_lServerID); } } else { allipinfo[i][j].m_lServerID = -1; allipinfo[i][j].m_csChanName.Format(""); allipinfo[i][j].m_iChannel = -1; } } } } } ClientParam.m_bCyclePlay = FALSE; ClientParam.m_iCycleTime = 20; ClientParam.m_bUseCard = FALSE; ClientParam.m_bNTSC = FALSE; ClientParam.m_bAutoRecord = FALSE; ClientParam.m_bCycleRecord = FALSE; ClientParam.m_iRecordFileInterval = 60; ClientParam.m_iStartRecordDriver = 0; ClientParam.m_iEndRecordDriver = m_iHardDriverNum - 1; ClientParam.m_csDownLoadPath.Format(_T("C:\\DownLoad")); ClientParam.m_csPictureSavePath.Format(_T("C:\\Picture")); ClientParam.m_csLogSavePath.Format(_T("C:\\EventLog")); sTemp.Format("%s\\", ClientParam.m_csDownLoadPath); CreateDirectory(sTemp, NULL); sTemp.Format("%s\\", ClientParam.m_csPictureSavePath); CreateDirectory(sTemp, NULL); sTemp.Format("%s\\", ClientParam.m_csLogSavePath); CreateDirectory(sTemp, NULL); for(i = 0; i < 7; i++) { for(j = 0; j < 4; j++) { ClientParam.m_ClientRecordTime[i][j].m_iStartHour = 0; ClientParam.m_ClientRecordTime[i][j].m_iStartMinute = 0; ClientParam.m_ClientRecordTime[i][j].m_iStartTime = 0; ClientParam.m_ClientRecordTime[i][j].m_iStopHour = 0; ClientParam.m_ClientRecordTime[i][j].m_iStopMinute = 0; ClientParam.m_ClientRecordTime[i][j].m_iStopTime = 0; } } ClientParam.m_bAllDiskFull = FALSE; ClientParam.m_bPlaying = FALSE; ClientParam.m_bCycling = FALSE; ClientParam.m_bNextPage = FALSE; ClientParam.m_bFrontPage = FALSE; ClientParam.m_bEnlarged = FALSE; ClientParam.m_bFullScreen = FALSE; ClientParam.m_bMultiScreen = FALSE; for(i = 0; i < MAXIPNUMBER; i++) ClientParam.m_iAlarmHandle[i] = -1; for(i = 0; i < MAXVIEWNUM; i++) { ClientParam.m_VideoInfo[i].m_iBrightness = DEFAULTBRIGHTNESS; ClientParam.m_VideoInfo[i].m_iContrast = DEFAULTCONTRAST; ClientParam.m_VideoInfo[i].m_iSaturation = DEFAULTSATURATION; ClientParam.m_VideoInfo[i].m_iHue = DEFAULTHUE; } ClientParam.m_Volume = DEFAULTVOLUME; ReadClientConfig(); m_cCurrentRecordDriver = m_cHardDriver[ClientParam.m_iStartRecordDriver]; autorecordtimer = 0; autorecordtimer = SetTimer(AUTORECORD_TIMER, 2000, NULL); if(ClientParam.m_bCheckServerTime) { TRACE("启动硬盘录像机校时时钟,校时时间是每天的%06d", ClientParam.m_iCheckServerTime); checkservertimer = 0; checkservertimer = SetTimer(CHECKSERVER_TIMER, 1000, NULL); } for(i = 0; i < MAXALARMIN; i++) { alarminfo[i].m_csIP.Format(_T("")); alarminfo[i].m_csUsername.Format(_T("")); alarminfo[i].m_csPassword.Format(_T("")); alarminfo[i].m_lServerID = -1; alarminfo[i].m_iChannel = -1; alarminfo[i].m_iAlarmLevel = -1; alarminfo[i].m_iAlarmType = -1; alarminfo[i].m_iPortIndex = -1; alarminfo[i].m_wServerPort = 8000; } m_iAlarmNumber = 0; m_ld.SetRange(1,10,TRUE); m_sd.SetRange(1,10,TRUE); m_bhd.SetRange(1,10,TRUE); m_dbd.SetRange(1,10,TRUE); m_yl.SetRange(1,100,TRUE); m_ld.SetPos(DEFAULTBRIGHTNESS); m_sd.SetPos(DEFAULTHUE); m_bhd.SetPos(DEFAULTSATURATION); m_dbd.SetPos(DEFAULTCONTRAST); m_yl.SetPos(DEFAULTVOLUME); m_mybuttonup.SubclassDlgItem(IDC_BUTTONUP,this); m_mybuttondown.SubclassDlgItem(IDC_BUTTONDOWN,this); m_mybuttonleft.SubclassDlgItem(IDC_BUTTONLEFT,this); m_mybuttonright.SubclassDlgItem(IDC_BUTTONRIGHT,this); m_mybuttontjright.SubclassDlgItem(IDC_BUTTONTJRIGHT,this); m_mybuttontjleft.SubclassDlgItem(IDC_BUTTONTJLEFT,this); m_mybuttonjjleft.SubclassDlgItem(IDC_BUTTONJJLEFT,this); m_mybuttonjjright.SubclassDlgItem(IDC_BUTTONJJRIGHT,this); m_mybuttongqleft.SubclassDlgItem(IDC_BUTTONGQLEFT,this); m_mybuttongqright.SubclassDlgItem(IDC_BUTTONGQRIGHT,this); InitLed(); for (i=0;im_hWnd); // 设置连接的超时设置 NET_DVR_SetConnectTime(5000,1); //7200端口是监听端口 if(!NET_DVR_StartListen(NULL,7200)) { CString sTemp; sTemp.Format("ERROR: NET_DVR_StartListen = %d \n", NET_DVR_GetLastError()); AfxMessageBox(sTemp); } cycletimer = 0; m_NetDelayCtrl.SetCurSel(g_nNetDelay); MainDlg = this; return TRUE; // return TRUE unless you set the focus to a control } void CNewclientDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CNewclientDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CNewclientDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CNewclientDlg::OnExit() { // TODO: Add your control notification handler code here if(IDOK != MessageBox("确定要退出吗?","警告",IDOK)) return; int i = 0; F_StopPlay(); if(lVoiceIndex != -1) { if(NET_DVR_StopVoiceCom(lVoiceIndex)) { GetDlgItem(IDC_AUDIOEXCHANGE)->SetWindowText("语音对讲"); lVoiceIndex = -1; } else { AfxMessageBox("停止语音对讲失败!"); } } if(cycletimer) { KillTimer(CYCLE_TIMER); cycletimer = 0; } if(freespacetimer) { KillTimer(FREESPACE_TIMER); freespacetimer = 0; } if(fileintervaltimer) { KillTimer(FILEINTERVAL_TIMER); fileintervaltimer = 0; } if(checkservertimer) { // TRACE("关闭校时时钟"); KillTimer(CHECKSERVER_TIMER); checkservertimer = 0; } if(hVideoBeeper) SetEvent(hVideoBeeper); if(ClientParam.m_bUseCard) { NET_DVR_ReleaseDevice_Card(); NET_DVR_ReleaseDDraw_Card(); } NET_DVR_StopListen(); for(i=0; i= 0) { if(serverinfo[i].m_lServerID != -1) { if(ClientParam.m_iAlarmHandle[i] >= 0) { if(NET_DVR_CloseAlarmChan(ClientParam.m_iAlarmHandle[i])) { ClientParam.m_iAlarmHandle[i] = -1; } } if(!NET_DVR_Logout(serverinfo[i].m_lServerID)) { CString sTemp; sTemp.Format("ERROR: %s NET_DVR_Logout = %d",serverinfo[i].m_csServerIP, NET_DVR_GetLastError()); TRACE(sTemp); } } } } CDialog::OnCancel(); } void CNewclientDlg::ArrayWindow(WORD iPos, WORD iNumber) { int i = 0; CRect crect; GetClientRect(&crect); WORD iWidth,iHeight; NET_DVR_DISPLAY_PARA displaypara; for (i = 0;i < MAXVIEWNUM;i++) { myoutput[i].ShowWindow(SW_HIDE); } switch(iNumber) { case 4: if(ClientParam.m_bMultiScreen) { iWidth = 510; iHeight = 383; MYVIEW_LEFT = 0; MYVIEW_TOP = 0; } else { MYVIEW_LEFT = 20; MYVIEW_TOP = 20; iWidth = 354; iHeight = 290; } bLargeWnd = FALSE; for(i = 0; i < 2; i++) { myoutput[i].MoveWindow(MYVIEW_LEFT+i*iWidth+i*3,MYVIEW_TOP,iWidth,iHeight,true); myoutput[i].m_display_para.nLeft = MYVIEW_LEFT+i*iWidth+i*3/*-2*/; myoutput[i].m_display_para.nTop = MYVIEW_TOP; myoutput[i].m_display_para.nWidth = iWidth/*+2*/; myoutput[i].m_display_para.nHeight = iHeight; myoutput[i].ShowWindow(SW_SHOW); } for(i = 2; i < 4; i++) { myoutput[i].MoveWindow(MYVIEW_LEFT+(i-2)*iWidth+(i-2)*3,MYVIEW_TOP+iHeight+2,iWidth,iHeight,true); myoutput[i].m_display_para.nLeft = MYVIEW_LEFT+(i-2)*iWidth+(i-2)*3/*-2*/; myoutput[i].m_display_para.nTop = MYVIEW_TOP+iHeight+2; myoutput[i].m_display_para.nWidth = iWidth/*+2*/; myoutput[i].m_display_para.nHeight = iHeight; myoutput[i].ShowWindow(SW_SHOW); } break; case 9: if(ClientParam.m_bMultiScreen) { iWidth = 339; iHeight = 254; MYVIEW_LEFT = 0; MYVIEW_TOP = 0; } else { iWidth = 234; iHeight = 192; MYVIEW_LEFT = 20; MYVIEW_TOP = 20; } bLargeWnd = FALSE; for (i=0;i<3;i++) { myoutput[i].MoveWindow(MYVIEW_LEFT+i*iWidth+i*3,MYVIEW_TOP,iWidth,iHeight,true); myoutput[i].m_display_para.nLeft = MYVIEW_LEFT+i*iWidth+i*3/*-2*/; myoutput[i].m_display_para.nTop = MYVIEW_TOP; myoutput[i].m_display_para.nWidth = iWidth/*+2*/; myoutput[i].m_display_para.nHeight = iHeight; myoutput[i].ShowWindow(SW_SHOW); } for (i=3;i<6;i++) { myoutput[i].MoveWindow(MYVIEW_LEFT+(i-3)*iWidth+(i-3)*3,MYVIEW_TOP+iHeight+2,iWidth,iHeight,true); myoutput[i].m_display_para.nLeft = MYVIEW_LEFT+(i-3)*iWidth+(i-3)*3/*-2*/; myoutput[i].m_display_para.nTop = MYVIEW_TOP+iHeight+2; myoutput[i].m_display_para.nWidth = iWidth/*+2*/; myoutput[i].m_display_para.nHeight = iHeight; myoutput[i].ShowWindow(SW_SHOW); } for (i=6;i<9;i++) { myoutput[i].MoveWindow(MYVIEW_LEFT+(i-6)*iWidth+(i-6)*3,MYVIEW_TOP+2*iHeight+4,iWidth,iHeight,true); myoutput[i].m_display_para.nLeft = MYVIEW_LEFT+(i-6)*iWidth+(i-6)*3/*-2*/; myoutput[i].m_display_para.nTop = MYVIEW_TOP+(iHeight+2)*2; myoutput[i].m_display_para.nWidth = iWidth/*+2*/; myoutput[i].m_display_para.nHeight = iHeight; myoutput[i].ShowWindow(SW_SHOW); } break; case 16: if(ClientParam.m_bMultiScreen) { iWidth = 254; iHeight = 190; MYVIEW_LEFT = 0; MYVIEW_TOP = 0; } else { MYVIEW_LEFT = 20; MYVIEW_TOP = 20; iWidth = 178;//176; iHeight = 146;//144; } bLargeWnd = FALSE; for(i = 0; i < 4; i++) { myoutput[i].MoveWindow(MYVIEW_LEFT+i*iWidth+i*3, MYVIEW_TOP, iWidth, iHeight, true); myoutput[i].m_display_para.nLeft = MYVIEW_LEFT+i*iWidth+i*3/*-2*/; myoutput[i].m_display_para.nTop = MYVIEW_TOP; myoutput[i].m_display_para.nWidth = iWidth/*+2*/; myoutput[i].m_display_para.nHeight = iHeight; myoutput[i].ShowWindow(SW_SHOW); } for(i = 4; i < 8; i++) { myoutput[i].MoveWindow(MYVIEW_LEFT+(i-4)*iWidth+(i-4)*3, MYVIEW_TOP+iHeight+2, iWidth, iHeight, true); myoutput[i].m_display_para.nLeft = MYVIEW_LEFT+(i-4)*iWidth+(i-4)*3/*-2*/; myoutput[i].m_display_para.nTop = MYVIEW_TOP+iHeight+2; myoutput[i].m_display_para.nWidth = iWidth/*+2*/; myoutput[i].m_display_para.nHeight = iHeight; myoutput[i].ShowWindow(SW_SHOW); } for(i = 8; i < 12; i++) { myoutput[i].MoveWindow(MYVIEW_LEFT+(i-8)*iWidth+(i-8)*3, MYVIEW_TOP+iHeight*2+4, iWidth, iHeight, true); myoutput[i].m_display_para.nLeft = MYVIEW_LEFT+(i-8)*iWidth+(i-8)*3/*-2*/; myoutput[i].m_display_para.nTop = MYVIEW_TOP+(iHeight+2)*2; myoutput[i].m_display_para.nWidth = iWidth/*+2*/; myoutput[i].m_display_para.nHeight = iHeight; myoutput[i].ShowWindow(SW_SHOW); } for(i = 12; i < 16; i++) { myoutput[i].MoveWindow(MYVIEW_LEFT+(i-12)*iWidth+(i-12)*3, MYVIEW_TOP+iHeight*3+6, iWidth, iHeight, true); myoutput[i].m_display_para.nLeft = MYVIEW_LEFT+(i-12)*iWidth+(i-12)*3/*-2*/; myoutput[i].m_display_para.nTop = MYVIEW_TOP+(iHeight+2)*3; myoutput[i].m_display_para.nWidth = iWidth/*+2*/; myoutput[i].m_display_para.nHeight = iHeight; myoutput[i].ShowWindow(SW_SHOW); } break; case 1: // wndsize为TRUE时,表示画面中的某个窗口放大; // wndsize为FALSE时,表示画面只有一个窗口,也就不需要放大、缩小; if(ClientParam.m_bMultiScreen) { iWidth = 1024; iHeight = 768; MYVIEW_LEFT = 0; MYVIEW_TOP = 0; } else { MYVIEW_LEFT = 20; MYVIEW_TOP = 20; iWidth = 706; iHeight = 578; } myoutput[iPos].MoveWindow(MYVIEW_LEFT,MYVIEW_TOP,iWidth,iHeight,true); myoutput[iPos].m_display_para.nLeft = MYVIEW_LEFT; myoutput[iPos].m_display_para.nTop = MYVIEW_TOP; myoutput[iPos].m_display_para.nWidth = iWidth; myoutput[iPos].m_display_para.nHeight = iHeight; myoutput[iPos].ShowWindow(SW_SHOW); break; default: break; } if(ClientParam.m_bUseCard) { TRACE("Use Decode Card"); TRACE("iNumber = %d", iNumber); NET_DVR_ClearSurface_Card(); for(i = 0; i < MAXVIEWNUM; i++) { displaypara.bToScreen = 0; displaypara.bToVideoOut = 1; displaypara.nLeft = myoutput[i].m_display_para.nLeft; displaypara.nTop = myoutput[i].m_display_para.nTop; displaypara.nWidth = myoutput[i].m_display_para.nWidth; displaypara.nHeight = myoutput[i].m_display_para.nHeight; NET_DVR_ResetPara_Card(myoutput[i].m_iPlayhandle,&displaypara); } if(iNumber == 1) {//放大 displaypara.bToScreen = 1; displaypara.bToVideoOut = 1; displaypara.nLeft = myoutput[iPos].m_display_para.nLeft; displaypara.nTop = myoutput[iPos].m_display_para.nTop; displaypara.nWidth = myoutput[iPos].m_display_para.nWidth; displaypara.nHeight = myoutput[iPos].m_display_para.nHeight; NET_DVR_ResetPara_Card(myoutput[iPos].m_iPlayhandle,&displaypara); } else {//缩小 for(i = 0; i < iNumber; i++) { displaypara.bToScreen = 1; displaypara.bToVideoOut = 1; displaypara.nLeft = myoutput[i].m_display_para.nLeft; displaypara.nTop = myoutput[i].m_display_para.nTop; displaypara.nWidth = myoutput[i].m_display_para.nWidth; displaypara.nHeight = myoutput[i].m_display_para.nHeight; NET_DVR_ResetPara_Card(myoutput[i].m_iPlayhandle,&displaypara); } } } } void CNewclientDlg::MoveCurWin(int iWindowNum,int iCurWinPos) { CNewclientDlg* mainwnd =(CNewclientDlg*) AfxGetMainWnd(); int rectWidth = 0; int rectHeight = 0; int rectTop = 0; int rectLeft = 0; switch(iWindowNum) { case 1: rectWidth = 706; rectHeight = 578; rectTop = MYVIEW_TOP; rectLeft = MYVIEW_LEFT; break; case 4: rectWidth = 354; rectHeight = 290; switch(iCurWinPos) { case 0: case 1: rectTop = MYVIEW_TOP; rectLeft = MYVIEW_LEFT+iCurWinPos*rectWidth+iCurWinPos*3; break; case 2: case 3: rectTop = MYVIEW_TOP+rectHeight+2; rectLeft = MYVIEW_LEFT+(iCurWinPos-2)*rectWidth+(iCurWinPos-2)*3; break; default: break; } break; case 9: rectWidth = 234; rectHeight = 192; switch(iCurWinPos) { case 0: case 1: case 2: rectTop = MYVIEW_TOP; rectLeft = MYVIEW_LEFT+iCurWinPos*rectWidth+iCurWinPos*3; break; case 3: case 4: case 5: rectTop = MYVIEW_TOP+rectHeight + 2; rectLeft = MYVIEW_LEFT+(iCurWinPos-3)*rectWidth+(iCurWinPos-3)*3; break; case 6: case 7: case 8: rectTop = MYVIEW_TOP+2*rectHeight+4; rectLeft = MYVIEW_LEFT+(iCurWinPos-6)*rectWidth+(iCurWinPos-6)*3; break; default: break; } break; case 16: rectWidth = 178; rectHeight = 146; switch(iCurWinPos) { case 0: case 1: case 2: case 3: rectTop = MYVIEW_TOP; rectLeft = MYVIEW_LEFT+iCurWinPos*rectWidth+iCurWinPos*3; break; case 4: case 5: case 6: case 7: rectTop = MYVIEW_TOP+rectHeight+2; rectLeft = MYVIEW_LEFT+(iCurWinPos-4)*rectWidth+(iCurWinPos-4)*3; break; case 8: case 9: case 10: case 11: rectTop = MYVIEW_TOP+2*rectHeight+4; rectLeft = MYVIEW_LEFT+(iCurWinPos-8)*rectWidth+(iCurWinPos-8)*3; break; case 12: case 13: case 14: case 15: rectTop = MYVIEW_TOP+3*rectHeight+6; rectLeft = MYVIEW_LEFT+(iCurWinPos-12)*rectWidth+(iCurWinPos-12)*3; break; default: break; } break; default: break; } mycurwin.m_black.ShowWindow(SW_HIDE); mycurwin.MoveWindow(rectLeft-1,rectTop-1,rectWidth+2,rectHeight+2); mycurwin.m_black.ShowWindow(SW_SHOW); mycurwin.EnableWindow(FALSE); } void CNewclientDlg::InitLed() { int i; m_pCapLed[0] = &m_CapLed1; m_pCapLed[1] = &m_CapLed2; m_pCapLed[2] = &m_CapLed3; m_pCapLed[3] = &m_CapLed4; m_pCapLed[4] = &m_CapLed5; m_pCapLed[5] = &m_CapLed6; m_pCapLed[6] = &m_CapLed7; m_pCapLed[7] = &m_CapLed8; m_pCapLed[8] = &m_CapLed9; m_pCapLed[9] = &m_CapLed10; m_pCapLed[10] = &m_CapLed11; m_pCapLed[11] = &m_CapLed12; m_pCapLed[12] = &m_CapLed13; m_pCapLed[13] = &m_CapLed14; m_pCapLed[14] = &m_CapLed15; m_pCapLed[15] = &m_CapLed16; for(i = 0; i < MAXVIEWNUM; i++) { m_pCapLed[i]->SetLed(CLed::LED_COLOR_RED,CLed::LED_DISABLED,CLed::LED_ROUND); } m_pAlarmLed[0] = &m_AlarmLed1; m_pAlarmLed[1] = &m_AlarmLed2; m_pAlarmLed[2] = &m_AlarmLed3; m_pAlarmLed[3] = &m_AlarmLed4; m_pAlarmLed[4] = &m_AlarmLed5; m_pAlarmLed[5] = &m_AlarmLed6; m_pAlarmLed[6] = &m_AlarmLed7; m_pAlarmLed[7] = &m_AlarmLed8; m_pAlarmLed[8] = &m_AlarmLed9; m_pAlarmLed[9] = &m_AlarmLed10; m_pAlarmLed[10] = &m_AlarmLed11; m_pAlarmLed[11] = &m_AlarmLed12; m_pAlarmLed[12] = &m_AlarmLed13; m_pAlarmLed[13] = &m_AlarmLed14; m_pAlarmLed[14] = &m_AlarmLed15; m_pAlarmLed[15] = &m_AlarmLed16; for(i = 0; i < MAXVIEWNUM; i++) { m_pAlarmLed[i]->SetLed(CLed::LED_COLOR_RED,CLed::LED_DISABLED,CLed::LED_ROUND); } } void CNewclientDlg::F_InitDecodeCard() { int nDispNum = 0; TRACE("初始化解码卡"); int iRet = NET_DVR_InitDDraw_Card(this->m_hWnd,0xff0000); iRet=NET_DVR_InitDevice_Card(&channelcount); TRACE("ChannelCount = %d", channelcount); if(channelcount <= 0) { AfxMessageBox("请插入解码卡!"); return; } else if(channelcount > 16) { channelcount = 16; } if(ClientParam.m_bNTSC) { nDispNum = GetDisplayChannelCount(); if (nDispNum >= 2) { REGION_PARAM param[MAX_DISPLAY_REGION]; int i; memset(param, 0, sizeof(param)); for (i=0; i= 2) { REGION_PARAM param[MAX_DISPLAY_REGION]; int i; memset(param, 0, sizeof(param)); for (i=0; iSetWindowText("停止对讲"); } } else { if(NET_DVR_StopVoiceCom(lVoiceIndex)) { GetDlgItem(IDC_AUDIOEXCHANGE)->SetWindowText("语音对讲"); lVoiceIndex = -1; } else { AfxMessageBox("停止语音对讲失败!"); } } } void CNewclientDlg::OnSystemcfg() { // TODO: Add your control notification handler code here CSystemConfig SysCfgDlg; SysCfgDlg.DoModal(); if(nUseCard == 1) { channelcount = 0; F_InitDecodeCard(); ArrayWindow(0,WINDOWNUM); MoveCurWin(WINDOWNUM,0); nUseCard = 0; } if(nUseCard == 2) { NET_DVR_ReleaseDevice_Card(); NET_DVR_ReleaseDDraw_Card(); nUseCard = 0; } if(ClientParam.m_bCheckServerTime) { if(checkservertimer == 0) { TRACE("启动硬盘录像机校时时钟,校时时间是每天的%06d", ClientParam.m_iCheckServerTime); checkservertimer = SetTimer(CHECKSERVER_TIMER, 1000, NULL); } } else { if(checkservertimer) { // TRACE("关闭硬盘录像机校时时钟"); KillTimer(CHECKSERVER_TIMER); checkservertimer = 0; } } F_JudgeDiskFull(); } void CNewclientDlg::OnSelchangeCombowndnum() { // TODO: Add your control notification handler code here int i; WORD wndnum; i = m_windownum.GetCurSel(); switch(i) { case 0: wndnum = 1; break; case 1: wndnum = 4; break; case 2: wndnum = 9; break; case 3: wndnum = 16; break; default: break; } if(WINDOWNUM != wndnum) { WINDOWNUM = wndnum; if(ClientParam.m_bCycling) { AfxMessageBox("请停止循环播放!"); return; } if(ClientParam.m_bPlaying) { TRACE("Stop Play"); F_StopPlay(); OnVideonetplay(); } ArrayWindow(0, WINDOWNUM); MoveCurWin(WINDOWNUM,0); } } void CNewclientDlg::F_StopPlay() { int i; if(cycletimer) { KillTimer(CYCLE_TIMER); cycletimer = 0; } if(!ClientParam.m_bUseCard) { if(!g_bShareSound) NET_DVR_CloseSound(); } for(i = 0; i < MAXVIEWNUM; i++) { if(myoutput[i].m_bFileSave) F_StopClientRecord(i); if(g_bShareSound) NET_DVR_CloseSoundShare(myoutput[i].m_iPlayhandle); myoutput[i].StopNet(); } GetDlgItem(IDC_PLAY)->SetWindowText("预览"); numberpos = 0; if( (ClientParam.m_bEnlarged) || (ClientParam.m_bFullScreen) ) { ArrayWindow(0, WINDOWNUM); MoveCurWin(WINDOWNUM,0); } ClientParam.m_bPlaying = FALSE; ClientParam.m_bCycling = FALSE; ClientParam.m_bPaused = FALSE; ClientParam.m_bNextPage = FALSE; ClientParam.m_bFrontPage = FALSE; GetDlgItem(IDC_COMBOWNDNUM)->EnableWindow(TRUE); } void CNewclientDlg::OnVideonetplay() { // TODO: Add your control notification handler code here int itemp,i; UpdateData(TRUE); if(iSurveillanceNumber == 0) return; if(ClientParam.m_bPlaying) { TRACE("Stop Play"); F_StopPlay(); // m_windownum.EnableWindow(TRUE); return; } GetDlgItem(IDC_COMBOWNDNUM)->EnableWindow(FALSE); ClientParam.m_bPlaying = TRUE; if(iSurveillanceNumber < WINDOWNUM) itemp = iSurveillanceNumber; else itemp = WINDOWNUM; for(i=0;i= 0)) { ClientParam.m_bPlaySound[i] = TRUE; } } Sleep(100); } if(iSurveillanceNumber <= WINDOWNUM) { numberpos = iSurveillanceNumber; } else { numberpos = WINDOWNUM; if(ClientParam.m_bCyclePlay) //循环播放 { if(cycletimer == 0) { cycletimer = SetTimer(CYCLE_TIMER,ClientParam.m_iCycleTime*1000,NULL); } ClientParam.m_bCycling = TRUE; m_bChangePage = TRUE; ClientParam.m_bPaused = FALSE; } else { ClientParam.m_bNextPage = TRUE; ClientParam.m_bFrontPage = FALSE; } } // m_windownum.EnableWindow(FALSE); GetDlgItem(IDC_PLAY)->SetWindowText("停止"); UpdateData(FALSE); } void CNewclientDlg::F_FullScreen() { GetWindowPlacement(&m_OldWndPlacement); CRect WindowRect, ClientRect, FullScreenRect; int FullWidth, FullHeight; GetWindowRect(&WindowRect); RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, reposQuery, &ClientRect); ClientToScreen(&ClientRect); //获取屏幕的分辨率; FullWidth = GetSystemMetrics(SM_CXSCREEN); FullHeight = GetSystemMetrics(SM_CYSCREEN); //将除控制条外的客户区全屏显示到从(0,0)到(nFullWidth, nFullHeight)区域, 将(0,0)和(nFullWidth, nFullHeight)两个点外扩充原窗口和除控制条之外的 客户区位置间的差值, 就得到全屏显示的窗口位置; FullScreenRect.left = WindowRect.left-ClientRect.left; FullScreenRect.top = WindowRect.top-ClientRect.top; FullScreenRect.right = WindowRect.right-ClientRect.right+FullWidth; FullScreenRect.bottom = WindowRect.bottom-ClientRect.bottom+FullHeight; //进入全屏显示状态 ; WINDOWPLACEMENT wndpl; wndpl.length = sizeof(WINDOWPLACEMENT); wndpl.flags = 0; wndpl.showCmd = SW_SHOWNORMAL; wndpl.rcNormalPosition = FullScreenRect; SetWindowPlacement(&wndpl); int i; for(i = 0; i < WINDOWNUM; i++) myoutput[i].ShowWindow(SW_HIDE); F_ShowHide(FALSE); mycurwin.ShowWindow(SW_HIDE); i = iActiveWndNumber; if(ClientParam.m_bUseCard) { NET_DVR_DISPLAY_PARA displaypara; displaypara.bToVideoOut = 1; displaypara.bToScreen = 1; displaypara.nLeft = 0; displaypara.nTop = 0; displaypara.nWidth = 1024; displaypara.nHeight = 768; NET_DVR_ResetPara_Card(myoutput[i].m_iPlayhandle,&displaypara); } } void CNewclientDlg::F_EndFullScreen() { SetWindowPlacement(&m_OldWndPlacement); F_ShowHide(TRUE); mycurwin.ShowWindow(SW_SHOW); } void CNewclientDlg::F_ShowHide(BOOL bShow) { if(bShow) { //云台 GetDlgItem(IDC_BUTTONUP)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BUTTONLEFT)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BUTTONRIGHT)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BUTTONDOWN)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BUTTONTJLEFT)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BUTTONTJRIGHT)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BUTTONJJLEFT)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BUTTONJJRIGHT)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BUTTONGQLEFT)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BUTTONGQRIGHT)->ShowWindow(SW_SHOW); GetDlgItem(IDC_YZD)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BUTTONYZW)->ShowWindow(SW_SHOW); //预览 GetDlgItem(IDC_PLAY)->ShowWindow(SW_SHOW); //系统设置 GetDlgItem(IDC_SYSTEMCFG)->ShowWindow(SW_SHOW); //抓图 GetDlgItem(IDC_GETPICTURE)->ShowWindow(SW_SHOW); //录像 GetDlgItem(IDC_RECORD)->ShowWindow(SW_SHOW); //时间日志 GetDlgItem(IDC_EVENTLIST)->ShowWindow(SW_SHOW); //布防,撤防 GetDlgItem(IDC_BUTTONALARMSET)->ShowWindow(SW_SHOW); //语音对讲 GetDlgItem(IDC_AUDIOEXCHANGE)->ShowWindow(SW_SHOW); //回放 GetDlgItem(IDC_VIDEOFILEPLAY)->ShowWindow(SW_SHOW); //亮度 GetDlgItem(IDC_SLIDERLD)->ShowWindow(SW_SHOW); //对比度 GetDlgItem(IDC_SLIDERDBD)->ShowWindow(SW_SHOW); //饱和度 GetDlgItem(IDC_SLIDERBHD)->ShowWindow(SW_SHOW); //色度 GetDlgItem(IDC_SLIDERSD)->ShowWindow(SW_SHOW); //音量 GetDlgItem(IDC_SLIDERYL)->ShowWindow(SW_SHOW); //恢复默认值 GetDlgItem(IDC_BUTTONPOLL)->ShowWindow(SW_SHOW); //退出系统 GetDlgItem(IDC_EXIT)->ShowWindow(SW_SHOW); //窗口画面数 GetDlgItem(IDC_COMBOWNDNUM)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LED1)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LED2)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LED3)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LED4)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LED5)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LED6)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LED7)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LED8)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LED9)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LED10)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LED11)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LED12)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LED13)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LED14)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LED15)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LED16)->ShowWindow(SW_SHOW); GetDlgItem(IDC_ALARMLED1)->ShowWindow(SW_SHOW); GetDlgItem(IDC_ALARMLED2)->ShowWindow(SW_SHOW); GetDlgItem(IDC_ALARMLED3)->ShowWindow(SW_SHOW); GetDlgItem(IDC_ALARMLED4)->ShowWindow(SW_SHOW); GetDlgItem(IDC_ALARMLED5)->ShowWindow(SW_SHOW); GetDlgItem(IDC_ALARMLED6)->ShowWindow(SW_SHOW); GetDlgItem(IDC_ALARMLED7)->ShowWindow(SW_SHOW); GetDlgItem(IDC_ALARMLED8)->ShowWindow(SW_SHOW); GetDlgItem(IDC_ALARMLED9)->ShowWindow(SW_SHOW); GetDlgItem(IDC_ALARMLED10)->ShowWindow(SW_SHOW); GetDlgItem(IDC_ALARMLED11)->ShowWindow(SW_SHOW); GetDlgItem(IDC_ALARMLED12)->ShowWindow(SW_SHOW); GetDlgItem(IDC_ALARMLED13)->ShowWindow(SW_SHOW); GetDlgItem(IDC_ALARMLED14)->ShowWindow(SW_SHOW); GetDlgItem(IDC_ALARMLED15)->ShowWindow(SW_SHOW); GetDlgItem(IDC_ALARMLED16)->ShowWindow(SW_SHOW); //2006-01-11 GetDlgItem(IDC_STATIC0)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC1)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC2)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC3)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC4)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC5)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC6)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC7)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC8)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC9)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC10)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC11)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC12)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC13)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC14)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC15)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC16)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC17)->ShowWindow(SW_SHOW); } else { //云台 GetDlgItem(IDC_BUTTONUP)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTONLEFT)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTONRIGHT)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTONDOWN)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTONTJLEFT)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTONTJRIGHT)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTONJJLEFT)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTONJJRIGHT)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTONGQLEFT)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTONGQRIGHT)->ShowWindow(SW_HIDE); GetDlgItem(IDC_YZD)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTONYZW)->ShowWindow(SW_HIDE); //预览 GetDlgItem(IDC_PLAY)->ShowWindow(SW_HIDE); //系统设置 GetDlgItem(IDC_SYSTEMCFG)->ShowWindow(SW_HIDE); //抓图 GetDlgItem(IDC_GETPICTURE)->ShowWindow(SW_HIDE); //录像 GetDlgItem(IDC_RECORD)->ShowWindow(SW_HIDE); //时间日志 GetDlgItem(IDC_EVENTLIST)->ShowWindow(SW_HIDE); //布防,撤防 GetDlgItem(IDC_BUTTONALARMSET)->ShowWindow(SW_HIDE); //语音对讲 GetDlgItem(IDC_AUDIOEXCHANGE)->ShowWindow(SW_HIDE); //回放 GetDlgItem(IDC_VIDEOFILEPLAY)->ShowWindow(SW_HIDE); //亮度 GetDlgItem(IDC_SLIDERLD)->ShowWindow(SW_HIDE); //对比度 GetDlgItem(IDC_SLIDERDBD)->ShowWindow(SW_HIDE); //饱和度 GetDlgItem(IDC_SLIDERBHD)->ShowWindow(SW_HIDE); //色度 GetDlgItem(IDC_SLIDERSD)->ShowWindow(SW_HIDE); //音量 GetDlgItem(IDC_SLIDERYL)->ShowWindow(SW_HIDE); //恢复默认值 GetDlgItem(IDC_BUTTONPOLL)->ShowWindow(SW_HIDE); //退出系统 GetDlgItem(IDC_EXIT)->ShowWindow(SW_HIDE); //窗口画面数 GetDlgItem(IDC_COMBOWNDNUM)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LED1)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LED2)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LED3)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LED4)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LED5)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LED6)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LED7)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LED8)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LED9)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LED10)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LED11)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LED12)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LED13)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LED14)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LED15)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LED16)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ALARMLED1)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ALARMLED2)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ALARMLED3)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ALARMLED4)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ALARMLED5)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ALARMLED6)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ALARMLED7)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ALARMLED8)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ALARMLED9)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ALARMLED10)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ALARMLED11)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ALARMLED12)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ALARMLED13)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ALARMLED14)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ALARMLED15)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ALARMLED16)->ShowWindow(SW_HIDE); //2006-01-11 GetDlgItem(IDC_STATIC0)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC1)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC2)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC3)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC4)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC5)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC6)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC7)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC8)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC9)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC10)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC11)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC12)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC13)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC14)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC15)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC16)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC17)->ShowWindow(SW_HIDE); } } void CNewclientDlg::F_ShowVideoParams() { m_ld.SetPos(ClientParam.m_VideoInfo[iActiveWndNumber].m_iBrightness); m_sd.SetPos(ClientParam.m_VideoInfo[iActiveWndNumber].m_iHue); m_bhd.SetPos(ClientParam.m_VideoInfo[iActiveWndNumber].m_iSaturation); m_dbd.SetPos(ClientParam.m_VideoInfo[iActiveWndNumber].m_iContrast); m_yl.SetPos(ClientParam.m_Volume); } void CNewclientDlg::F_NextPage() { int itemp,i; itemp = numberpos % WINDOWNUM; if ((itemp > 0) || (numberpos == iSurveillanceNumber))//只有当numberpos是WINDOWNUM的整数倍时才有可能按next return; for(i = 0; i < MAXVIEWNUM; i++) { if( (myoutput[i].m_iPlayhandle >= 0) || (myoutput[i].m_bFileSave) ) F_StopClientRecord(i); } if( (ClientParam.m_bEnlarged) || (ClientParam.m_bFullScreen) ) { ArrayWindow(0, WINDOWNUM); //窗口放大状态时,循环到下一画面,恢复原窗口数; MoveCurWin(WINDOWNUM,0); ClientParam.m_bEnlarged = FALSE; ClientParam.m_bFullScreen = FALSE; } itemp = iSurveillanceNumber - numberpos; if(itemp > WINDOWNUM) itemp = WINDOWNUM; if(!ClientParam.m_bUseCard) { if(!g_bShareSound) NET_DVR_CloseSound(); } for(i=0;i= 0)) { ClientParam.m_bPlaySound[i] = TRUE; } } Sleep(100); } } itemp = iSurveillanceNumber - numberpos; if(itemp <= WINDOWNUM) { numberpos = iSurveillanceNumber; ClientParam.m_bNextPage = FALSE; } else { numberpos += WINDOWNUM; } ClientParam.m_bFrontPage = TRUE; UpdateData(FALSE); } void CNewclientDlg::F_FrontPage() { int itemp,i; if(numberpos <= WINDOWNUM) return; for(i = 0; i < MAXVIEWNUM; i++) { if( (myoutput[i].m_iPlayhandle >= 0) || (myoutput[i].m_bFileSave) ) F_StopClientRecord(i); } if( (ClientParam.m_bEnlarged) || (ClientParam.m_bFullScreen) ) { ArrayWindow(0, WINDOWNUM); //窗口放大状态时,循环到下一画面,恢复原窗口数; MoveCurWin(WINDOWNUM,0); ClientParam.m_bEnlarged = FALSE; ClientParam.m_bFullScreen = FALSE; } if(numberpos > WINDOWNUM) { if(numberpos < 2*WINDOWNUM) { itemp = 0; } else { i = numberpos % WINDOWNUM; if (i == 0) itemp = numberpos - 2*WINDOWNUM ; else itemp = numberpos - WINDOWNUM -i; } if(!ClientParam.m_bUseCard) { if(!g_bShareSound) NET_DVR_CloseSound(); } //itemp:确定上一页要播放监控点的起始编号; for(i=0;i= 0)) { ClientParam.m_bPlaySound[i] = TRUE; } } Sleep(100); } } if (numberpos <= 2*WINDOWNUM) { numberpos = WINDOWNUM; ClientParam.m_bFrontPage = FALSE; //没有上一页 } else { i = numberpos % WINDOWNUM; if(i == 0) numberpos -= WINDOWNUM; else numberpos -= i; } } ClientParam.m_bNextPage = TRUE; UpdateData(FALSE); } void CNewclientDlg::F_CyclePause() { if(!ClientParam.m_bPaused) { ClientParam.m_bPaused = TRUE; if(cycletimer) { KillTimer(CYCLE_TIMER); cycletimer = 0; } } else { m_bChangePage = TRUE; F_CyclePlay(); if(cycletimer == 0) cycletimer = SetTimer(CYCLE_TIMER,ClientParam.m_iCycleTime*1000,NULL); ClientParam.m_bPaused = FALSE; } } void CNewclientDlg::F_CyclePlay() { int itemp,i,j; TRACE("F_CyclePlay"); if (iSurveillanceNumber <= WINDOWNUM) return; m_bChangePage = FALSE; if( (ClientParam.m_bEnlarged) || (ClientParam.m_bFullScreen) ) { if(ClientParam.m_bFullScreen) { F_EndFullScreen(); } ArrayWindow(0, WINDOWNUM); //窗口放大状态时,循环到下一画面,恢复原窗口数; MoveCurWin(WINDOWNUM,0); ClientParam.m_bEnlarged = FALSE; ClientParam.m_bFullScreen = FALSE; } if (iSurveillanceNumber == numberpos) //循环已到了最后一页,又开始第一页; itemp = WINDOWNUM; else { itemp = iSurveillanceNumber - numberpos; if (itemp > WINDOWNUM) itemp = WINDOWNUM; } if (iSurveillanceNumber == numberpos) j = 0; else j = numberpos; if(!ClientParam.m_bUseCard) { if(!g_bShareSound) NET_DVR_CloseSound(); } //如果一个循环结束,可能不是从9->9,或许是9->i,所以需要对对(9-i)做ClientStop //循环到最后一个画面,要播放的窗口数可能小于WINDOWNUM,所以在播放最后一个画面时,关闭多余的播放窗口; for(i=0;i= 0)) { ClientParam.m_bPlaySound[i] = TRUE; } } Sleep(100); // TRACE("cycle startplay %d", myoutput[i].m_iPlayhandle); } } // MyInvalidate(); itemp = iSurveillanceNumber - numberpos; if(itemp ==0) { numberpos = WINDOWNUM; } else if(itemp <= WINDOWNUM) { numberpos = iSurveillanceNumber; } else { numberpos += WINDOWNUM; } m_bChangePage = TRUE; UpdateData(FALSE); } void CNewclientDlg::OnGetpicture() { // TODO: Add your control notification handler code here RECT rc,rc2; GetClientRect(&rc); if (!getpic.IsExisted()) { getpic.Create(IDD_DLG_GETCAPTURE, NULL); ::GetClientRect(getpic.m_hWnd, &rc2); ::SetWindowPos(getpic.m_hWnd, wndTopMost, (rc.left+rc.right)/2, (rc.top+rc.bottom)/2, (rc2.right-rc2.left)+8, (rc2.bottom-rc2.top)+24, SWP_SHOWWINDOW); getpic.ShowWindow(SW_SHOW); } else { ::GetClientRect(getpic.m_hWnd, &rc2); ::SetWindowPos(getpic.m_hWnd, wndTopMost, (rc.left+rc.right)/2, (rc.top+rc.bottom)/2, (rc2.right-rc2.left)+8, (rc2.bottom-rc2.top)+24, SWP_SHOWWINDOW); getpic.ShowWindow(SW_SHOW); } } void CNewclientDlg::OnRecord() { // TODO: Add your control notification handler code here int i = iActiveWndNumber; if(myoutput[i].m_bIsAutoSave || ClientParam.m_bCycling) return; if( (myoutput[i].m_iPlayhandle >= 0) && (!myoutput[i].m_bFileSave) ) { //AfxMessageBox("111"); if(F_MakeDir()) { F_StartClientRecord(i); } } else if(myoutput[i].m_bFileSave) { F_StopClientRecord(i); } } BOOL CNewclientDlg::F_MakeDir() { CString sTemp; DWORD dirattr; CTime time; time = CTime::GetCurrentTime(); sTemp.Format("%c:\\mpeg4record\\", m_cCurrentRecordDriver); dirattr = GetFileAttributes(sTemp); if(dirattr == FILE_ATTRIBUTE_DIRECTORY) { sTemp.Format("%c:\\mpeg4record\\%4d-%02d-%02d\\", m_cCurrentRecordDriver, time.GetYear(), time.GetMonth(), time.GetDay()); dirattr=GetFileAttributes(sTemp); if(dirattr == FILE_ATTRIBUTE_DIRECTORY) { ClientParam.m_csClientRecordPath.Format("%s",sTemp); TRACE("已经创建了目录%s", sTemp); return TRUE; } else { if(!CreateDirectory(sTemp, NULL)) { AfxMessageBox("创建年月日目录失败!"); return FALSE; } else { ClientParam.m_csClientRecordPath.Format("%s",sTemp); TRACE("在已有的目录%c:\\mpeg4record下创建子目录%4d-%02d-%02d", m_cCurrentRecordDriver, time.GetYear(), time.GetMonth(), time.GetDay()); return TRUE; } } } if(!CreateDirectory(sTemp, NULL)) { TRACE("创建mpeg4record目录失败!"); return FALSE; } sTemp.Format("%c:\\mpeg4record\\%4d-%02d-%02d\\",m_cCurrentRecordDriver, time.GetYear(), time.GetMonth(), time.GetDay()); if(!CreateDirectory(sTemp, NULL)) { return FALSE; } ClientParam.m_csClientRecordPath.Format("%s",sTemp); TRACE("先创建%c:\\mpeg4record目录,再创建子目录%4d-%02d-%02d", m_cCurrentRecordDriver, time.GetYear(), time.GetMonth(), time.GetDay()); return TRUE; } void CNewclientDlg::F_StartClientRecord(int iRecordWndIndex) { int i; char cFilename[256]; i = iRecordWndIndex; TRACE("Start myoutput[%d] Client Record", i); CTime time = CTime::GetCurrentTime(); sprintf(cFilename, "%s%s_%02d_%4d%02d%02d_%02d%02d%02d.mp4", ClientParam.m_csClientRecordPath, myoutput[i].m_csIP, myoutput[i].m_iChannel, \ time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond() ); if(!NET_DVR_SaveRealData(myoutput[i].m_iPlayhandle, cFilename)) { AfxMessageBox("录像失败!"); return; } TRACE("Client Record Filename = %s", cFilename); myoutput[i].m_lChangeFileNameTime = time.GetTime() + ClientParam.m_iRecordFileInterval * 60; myoutput[i].m_bFileSave = TRUE; m_pCapLed[i]->SetLed(CLed::LED_COLOR_RED,CLed::LED_ON,CLed::LED_ROUND); } void CNewclientDlg::F_StopClientRecord(int iRecordWndIndex) { int i; i = iRecordWndIndex; TRACE("Stop myoutput[%d] Client Record", i); NET_DVR_StopSaveRealData(myoutput[i].m_iPlayhandle); myoutput[i].m_bFileSave = FALSE; m_pCapLed[i]->SetLed(CLed::LED_COLOR_RED,CLed::LED_DISABLED,CLed::LED_ROUND); } /* void CNewclientDlg::OnHide() { // TODO: Add your control notification handler code here ShowWindow(SW_MINIMIZE); } */ void CNewclientDlg::OnEventlist() { // TODO: Add your control notification handler code here int i; CEventLog EventLogDlg; EventLogDlg.DoModal(); SetEvent(hVideoBeeper); for(i = 0; i < MAXVIEWNUM; i++) { if(ClientParam.m_iAlarmHandle[i] >= 0) { m_pAlarmLed[i]->SetLed(CLed::LED_COLOR_GREEN,CLed::LED_ON,CLed::LED_ROUND); } else m_pAlarmLed[i]->SetLed(CLed::LED_COLOR_RED,CLed::LED_DISABLED,CLed::LED_ROUND); } for(i = 0; i < MAXALARMIN; i++) { alarminfo[i].m_csIP.Format(_T("")); alarminfo[i].m_csUsername.Format(_T("")); alarminfo[i].m_csPassword.Format(_T("")); alarminfo[i].m_iChannel = -1; alarminfo[i].m_iAlarmLevel = -1; alarminfo[i].m_iAlarmType = -1; alarminfo[i].m_iPortIndex = -1; alarminfo[i].m_wServerPort = 8000; } m_iAlarmNumber = 0; } void CNewclientDlg::OnButtonalarmset() { // TODO: Add your control notification handler code here int i; CSetAlarm SetAlarmDlg; SetAlarmDlg.DoModal(); if(SetAlarmDlg.m_bOK) { for(i = 0; i < MAXVIEWNUM; i++) { if(ClientParam.m_iAlarmHandle[i] >= 0) { m_pAlarmLed[i]->SetLed(CLed::LED_COLOR_GREEN,CLed::LED_ON,CLed::LED_ROUND); } else { m_pAlarmLed[i]->SetLed(CLed::LED_COLOR_RED,CLed::LED_DISABLED,CLed::LED_ROUND); } } } } void CNewclientDlg::OnVideofileplay() { // TODO: Add your control notification handler code here CPlayBack PlayBackDlg; PlayBackDlg.DoModal(); } BOOL CNewclientDlg::F_JudgeDiskFull() { int i; ULARGE_INTEGER FreeSpace,CallerSpace,TotalSpace; CString csRootPath; for(i = ClientParam.m_iStartRecordDriver; i < ClientParam.m_iEndRecordDriver + 1; i++) { csRootPath.Format("%c%s",m_cHardDriver[i],":\\"); //从录像起始驱动器开始 GetDiskFreeSpaceEx(csRootPath,&CallerSpace,&TotalSpace,&FreeSpace); if(CallerSpace.QuadPart > MINSPACE) { m_cCurrentRecordDriver = m_cHardDriver[i]; // TRACE("m_cCurrentRecordDriver = %c:\\", m_cCurrentRecordDriver); ClientParam.m_bAllDiskFull = FALSE; return TRUE; } } ClientParam.m_bAllDiskFull = TRUE; return FALSE; } void CNewclientDlg::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default //在此调用此函数重置时区,以修正时区调整之后由于程序只在初始化时获取时区而造成不能随之调整的问题 _tzset(); time_t lCurrentTime; CString csRootPath; CString csTemp; int i,j; CTime time1 = CTime::GetCurrentTime(); //-1与星期相对应 int iWeekday = time1.GetDayOfWeek() - 1; WORD iNowTime = time1.GetHour() * 100 + time1.GetMinute(); NET_DVR_TIME CurTime; CurTime.dwYear = time1.GetYear(); CurTime.dwMonth = time1.GetMonth(); CurTime.dwDay = time1.GetDay(); CurTime.dwHour = time1.GetHour(); CurTime.dwMinute = time1.GetMinute(); CurTime.dwSecond = time1.GetSecond(); HANDLE hSnap = NULL; switch(nIDEvent) { case CYCLE_TIMER: if(m_bChangePage) F_CyclePlay(); break; case FREESPACE_TIMER: csRootPath.Format("%c:\\", m_cCurrentRecordDriver); ULARGE_INTEGER FreeSpace,CallerSpace,TotalSpace; GetDiskFreeSpaceEx(csRootPath,&CallerSpace,&TotalSpace,&FreeSpace); ClientParam.m_bAllDiskFull = FALSE; if(CallerSpace.QuadPart < MINSPACE) { csTemp.Format("%4d-%02d-%02d %02d:%02d:%02d 硬盘驱动器%c已满", CurTime.dwYear, CurTime.dwMonth, CurTime.dwDay, CurTime.dwHour, CurTime.dwMinute, CurTime.dwSecond, m_cCurrentRecordDriver); TRACE(csTemp); //AfxMessageBox(csTemp); if(!F_JudgeDiskFull()) //所有硬盘都满,删除8个最早的录像文件 { if(ClientParam.m_bCycleRecord) { F_DeleteClientRecordFile(); } else { for(i = 0; i < MAXVIEWNUM; i++) { if( (myoutput[i].m_iPlayhandle >= 0) && (myoutput[i].m_bFileSave) ) { F_StopClientRecord(i); } } AfxMessageBox("客户端录像硬盘驱动器已满,无法继续录像!"); return; } } else { //其他分区还有空间,存放到其他分区 //AfxMessageBox("222"); if(F_MakeDir()) { TRACE("客户端录像文件存放到%c分区", m_cCurrentRecordDriver); for(i = 0; i < MAXVIEWNUM; i++) { if( (myoutput[i].m_iPlayhandle >= 0) && (myoutput[i].m_bFileSave) ) F_ChangeRecordFileName(i); } } } } break; case FILEINTERVAL_TIMER: ////////////////////// ////////////////////// for(i = 0; i < MAXVIEWNUM; i++) { if( (myoutput[i].m_iPlayhandle >= 0) && (myoutput[i].m_bFileSave) ) { lCurrentTime = time1.GetTime(); if(lCurrentTime - myoutput[i].m_lChangeFileNameTime >= 0) { TRACE("更改客户端录象文件名时间到"); if(F_MakeDir()) F_ChangeRecordFileName(i); } } } break; case AUTORECORD_TIMER: if(ClientParam.m_bCycling) return; //循环播放客户端不允许录像 if(!ClientParam.m_bAutoRecord) { for(j = 0; j < MAXVIEWNUM; j++) { if(myoutput[j].m_bIsAutoSave) { F_StopClientRecord(j); myoutput[j].m_bIsAutoSave = FALSE; } } } else { for(i = 0; i < 4; i++) { if( (iNowTime >= ClientParam.m_ClientRecordTime[iWeekday][i].m_iStartTime) && (iNowTime < ClientParam.m_ClientRecordTime[iWeekday][i].m_iStopTime) ) { for(j = 0; j < MAXVIEWNUM; j++) { if(myoutput[j].m_iPlayhandle >= 0) { //2008-02-25 既没有在自动录像又没有在手动录像才能开始自动录像 if(!myoutput[j].m_bIsAutoSave && !myoutput[j].m_bFileSave) { if(ClientParam.m_bAllDiskFull) { return; } if(F_MakeDir()) { F_StartClientRecord(j); myoutput[j].m_bIsAutoSave = TRUE; } } } } break; } } //2008-02-25 当前时间不在设定的范围内要将开始的自动录像停掉 if (i == 4) { for(j = 0; j < MAXVIEWNUM; j++) { if(myoutput[j].m_bIsAutoSave) { F_StopClientRecord(j); myoutput[j].m_bIsAutoSave = FALSE; } } } } break; case CHECKSERVER_TIMER: if(ClientParam.m_iCheckServerTime == (LONG)(CurTime.dwHour*10000 + CurTime.dwMinute*100 + CurTime.dwSecond) ) { for(i = 0; i < MAXIPNUMBER; i++) { if(serverinfo[i].m_csServerName != "") { if(NET_DVR_SetDVRConfig(serverinfo[i].m_lServerID, NET_DVR_SET_TIMECFG,0,&CurTime, sizeof(NET_DVR_TIME))) { TRACE("%4d年%02d月%02d日%02d时%02d分%02d秒进行硬盘录像机校时成功.", CurTime.dwYear, CurTime.dwMonth, CurTime.dwDay, CurTime.dwHour, CurTime.dwMinute, CurTime.dwSecond); } else { TRACE("%4d年%02d月%02d日%02d时%02d分%02d秒进行硬盘录像机校时失败.", CurTime.dwYear, CurTime.dwMonth, CurTime.dwDay, CurTime.dwHour, CurTime.dwMinute, CurTime.dwSecond); } } } } break; default: break; } CDialog::OnTimer(nIDEvent); } void CNewclientDlg::F_DeleteClientRecordFile() { CFileFind fdfile,fdfilemp4; BOOL bFinded,bfilefind; CString sDeleteDir,sTempDelete; CString sDir; CString sDate; CString sFileName; CTime time,temptime; int i,deletenum = 0; sDeleteDir.Format("0000-00-00"); sTempDelete.Format("3000-00-00"); time=CTime::GetCurrentTime(); for(i = ClientParam.m_iStartRecordDriver; i < (ClientParam.m_iEndRecordDriver + 1); i++) { sDir.Format("%c:\\mpeg4record\\*.*",m_cHardDriver[i]); bFinded=fdfile.FindFile(sDir); while (bFinded) { bFinded=fdfile.FindNextFile(); if (fdfile.IsDots()) { continue; } if (fdfile.IsDirectory()) { if(fdfile.GetFileName()==_T("download")) { continue; } if(fdfile.GetFileName()==_T("alarm")) { continue; } sFileName.Format("%c:\\mpeg4record\\%s\\*.mp4",m_cHardDriver[i],fdfile.GetFileName()); bfilefind=fdfilemp4.FindFile(sFileName); if (!bfilefind) { RemoveDirectory(fdfile.GetFilePath()); TRACE("删除目录:%s",fdfile.GetFilePath()); } while(bfilefind) { bfilefind=fdfilemp4.FindNextFile(); if (fdfile.IsDots()) { continue; } fdfilemp4.GetCreationTime(temptime); if(temptime= 0) || (myoutput[i].m_bFileSave) ) F_StopClientRecord(i); } AfxMessageBox("硬盘容量不足,自动删除文件失败,请清理硬盘后重新开始录像!"); } else { sTempDelete.Format("删除文件%s成功",sFileName); TRACE("删除文件%s",sFileName); deletenum++; } } void CNewclientDlg::F_ChangeRecordFileName(int iRecordWndIndex) { int i; char cFilename[256]; CTime time = CTime::GetCurrentTime(); i = iRecordWndIndex; if(myoutput[i].m_bFileSave) { TRACE("停止myoutput[%d]客户端录像,更换文件名", i); NET_DVR_StopSaveRealData(myoutput[i].m_iPlayhandle); } if(myoutput[i].m_iPlayhandle >= 0) { sprintf(cFilename, "%s%s_%02d_%4d%02d%02d_%02d%02d%02d.mp4", ClientParam.m_csClientRecordPath, myoutput[i].m_csIP, myoutput[i].m_iChannel, \ time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond() ); if(!NET_DVR_SaveRealData(myoutput[i].m_iPlayhandle, cFilename)) { AfxMessageBox("录像失败!"); m_pCapLed[i]->SetLed(CLed::LED_COLOR_RED,CLed::LED_DISABLED,CLed::LED_ROUND); return; } myoutput[i].m_lChangeFileNameTime = time.GetTime() + ClientParam.m_iRecordFileInterval * 60; TRACE("Client Record Filename = %s", cFilename); myoutput[i].m_bFileSave = TRUE; m_pCapLed[i]->SetLed(CLed::LED_COLOR_RED,CLed::LED_ON,CLed::LED_ROUND); } } void CNewclientDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: Add your message handler code here and/or call default int i; WORD wTemp; WORD wVolumevalue; BOOL bRet; i = iActiveWndNumber; wTemp = (0xFFFF) / 100; bRet = FALSE; if(myoutput[i].m_iPlayhandle >= 0) { if(GetDlgItem(IDC_SLIDERLD) == pScrollBar) { ClientParam.m_VideoInfo[i].m_iBrightness = /*10 - */m_ld.GetPos(); bRet = TRUE; } else if(GetDlgItem(IDC_SLIDERDBD) == pScrollBar) { ClientParam.m_VideoInfo[i].m_iContrast = /*10 - */m_dbd.GetPos(); bRet = TRUE; } else if(GetDlgItem(IDC_SLIDERBHD) == pScrollBar) { ClientParam.m_VideoInfo[i].m_iSaturation = /*10 - */m_bhd.GetPos(); bRet = TRUE; } else if(GetDlgItem(IDC_SLIDERSD) == pScrollBar) { ClientParam.m_VideoInfo[i].m_iHue= /*10 - */m_sd.GetPos(); bRet = TRUE; } if(bRet) { bRet = NET_DVR_ClientSetVideoEffect(myoutput[i].m_iPlayhandle, ClientParam.m_VideoInfo[i].m_iBrightness, ClientParam.m_VideoInfo[i].m_iContrast, ClientParam.m_VideoInfo[i].m_iSaturation, ClientParam.m_VideoInfo[i].m_iHue); if(!bRet) { AfxMessageBox("设置视频参数失败!"); } } } if(GetDlgItem(IDC_SLIDERYL) == pScrollBar) { if(lVoiceIndex >= 0) { TRACE("调整语音对讲声音."); ClientParam.m_Volume = m_yl.GetPos(); wVolumevalue = (WORD)(m_yl.GetPos()) * wTemp; NET_DVR_SetVoiceComClientVolume(lVoiceIndex, wVolumevalue); } else if(ClientParam.m_bPlaySound[i] && (myoutput[i].m_iPlayhandle >= 0)) { TRACE("调整音频浏览声音."); ClientParam.m_Volume = m_yl.GetPos(); wVolumevalue = (WORD)(m_yl.GetPos()) * wTemp; if(g_bShareSound) { NET_DVR_OpenSoundShare(myoutput[iActiveWndNumber].m_iPlayhandle); } else { NET_DVR_OpenSound(myoutput[i].m_iPlayhandle); } NET_DVR_Volume(myoutput[i].m_iPlayhandle, wVolumevalue); } } CDialog::OnHScroll(nSBCode, nPos, pScrollBar); } void CNewclientDlg::OnButtonpoll() { // TODO: Add your control notification handler code here int i = iActiveWndNumber; WORD wTemp = (0xFFFF) / 100; WORD wVolumevalue; ClientParam.m_VideoInfo[i].m_iBrightness = DEFAULTBRIGHTNESS; ClientParam.m_VideoInfo[i].m_iContrast = DEFAULTCONTRAST; ClientParam.m_VideoInfo[i].m_iSaturation = DEFAULTSATURATION; ClientParam.m_VideoInfo[i].m_iHue = DEFAULTHUE; NET_DVR_ClientSetVideoEffect(myoutput[i].m_iPlayhandle, ClientParam.m_VideoInfo[i].m_iBrightness, ClientParam.m_VideoInfo[i].m_iContrast, ClientParam.m_VideoInfo[i].m_iSaturation, ClientParam.m_VideoInfo[i].m_iHue); ClientParam.m_Volume = DEFAULTVOLUME; if(lVoiceIndex >= 0) { TRACE("调整语音对讲声音."); wVolumevalue = (WORD)(ClientParam.m_Volume) * 10 *wTemp; NET_DVR_SetVoiceComClientVolume(lVoiceIndex, wVolumevalue); } else if(ClientParam.m_bPlaySound) { TRACE("调整音频浏览声音."); wVolumevalue = (WORD)(ClientParam.m_Volume) * 10 * wTemp; if(g_bShareSound) { NET_DVR_OpenSoundShare(myoutput[iActiveWndNumber].m_iPlayhandle); } else { NET_DVR_OpenSound(myoutput[i].m_iPlayhandle); } NET_DVR_Volume(myoutput[i].m_iPlayhandle, wVolumevalue); } m_ld.SetPos(ClientParam.m_VideoInfo[iActiveWndNumber].m_iBrightness); m_sd.SetPos(ClientParam.m_VideoInfo[iActiveWndNumber].m_iHue); m_bhd.SetPos(ClientParam.m_VideoInfo[iActiveWndNumber].m_iSaturation); m_dbd.SetPos(ClientParam.m_VideoInfo[iActiveWndNumber].m_iContrast); m_yl.SetPos(ClientParam.m_Volume); } void CNewclientDlg::OnButtonyzw() { // TODO: Add your control notification handler code here UpdateData(TRUE); int i = iActiveWndNumber; if(myoutput[i].m_iPlayhandle >= 0) { NET_DVR_PTZPreset(myoutput[i].m_iPlayhandle, GOTO_PRESET, m_yzd); } } void CNewclientDlg::OnCancel() { // TODO: Add extra cleanup here // CDialog::OnCancel(); } /* void CNewclientDlg::OnButauto() { // TODO: Add your control notification handler code here char buf[20]; buf[0] = 0xa0; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x07; buf[4] = 0x00; buf[5] = 0x63; buf[6] = 0xaf; buf[7] = 0x6b; NET_DVR_TransPTZ_Other(myoutput[0].m_lServerID, 1, buf, 8); } */ /*void CNewclientDlg::OnButsharesound() { // TODO: Add your control notification handler code here if(g_bShareSound) { NET_DVR_SetAudioMode(1); g_bShareSound = FALSE; // GetDlgItem(IDC_BUTSHARESOUND)->SetWindowText("sound"); } else { NET_DVR_SetAudioMode(2); g_bShareSound = TRUE; // GetDlgItem(IDC_BUTSHARESOUND)->SetWindowText("sharesound"); } } */ void CNewclientDlg::OnSelchangeCombonetdelay() { // TODO: Add your control notification handler code here UpdateData(TRUE); g_nNetDelay = m_NetDelayCtrl.GetCurSel(); } void CNewclientDlg::OnButton1() { // TODO: Add your control notification handler code here UpdateData(TRUE); int i = iActiveWndNumber; if(!NET_DVR_MakeKeyFrame(myoutput[i].m_lServerID, myoutput[i].m_iChannel)) { AfxMessageBox("NET_DVR_MakeKeyFrame failed [%d]", NET_DVR_GetLastError()); } } void CNewclientDlg::OnMove(int x, int y) { CDialog::OnMove(x, y); // TODO: Add your message handler code here Invalidate(TRUE); if (ClientParam.m_bUseCard) NET_DVR_RefreshSurface_Card(); UpdateWindow(); } void CNewclientDlg::OnButton2() { // TODO: Add your control notification handler code here UpdateData(TRUE); int i = iActiveWndNumber; if(!NET_DVR_MakeKeyFrameSub(myoutput[i].m_lServerID, myoutput[i].m_iChannel)) { AfxMessageBox("NET_DVR_MakeKeyFrameSub failed [%d]", NET_DVR_GetLastError()); } } void CNewclientDlg::OnCruise() { // TODO: Add your control notification handler code here if (myoutput[iActiveWndNumber].m_iPlayhandle < 0) { return; } CCruiseRoute CruiseRoute; CruiseRoute.m_lServerID = myoutput[iActiveWndNumber].m_lServerID; CruiseRoute.DoModal(); } void CNewclientDlg::OnBnClickedButtonup() { // TODO: 在此添加控件通知处理程序代码 } void CNewclientDlg::OnBnClickedButtondown() { // TODO: 在此添加控件通知处理程序代码 }