⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 remotechannelconfig.cpp

📁 监控开发资料,提供二次开发源码和使用说明书
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// RemoteChannelConfig.cpp : implementation file
//

#include "stdafx.h"
#include "newclient.h"
#include "RemoteChannelConfig.h"
#include "RemoteRecordPlanConfig.h"
#include "RemoteDetectConfig.h"
#include "RemoteHideConfig.h"
#include "RemoteHideAlarm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

LPNET_DVR_MOTION lpMotionDetect;
LPNET_DVR_HIDEALARM lpHideAlarm;
/////////////////////////////////////////////////////////////////////////////
// CRemoteChannelConfig dialog


CRemoteChannelConfig::CRemoteChannelConfig(CWnd* pParent /*=NULL*/)
	: CDialog(CRemoteChannelConfig::IDD, pParent)
{
	//{{AFX_DATA_INIT(CRemoteChannelConfig)
	m_ChannelName = _T("");
	m_bLogo = FALSE;
	m_bOsd = FALSE;
	m_bRecord = FALSE;
	m_bHide = FALSE;
	m_channame_x = 0;
	m_channame_y = 0;
	m_bChanname = FALSE;
	m_bDispWeek = FALSE;
	m_logo_x = 0;
	m_logo_y = 0;
	m_osd_y = 0;
	m_osd_x = 0;
	m_bMotion = FALSE;
	m_bHideAlarm = FALSE;
	m_BitRate = 0;
	//}}AFX_DATA_INIT
}


void CRemoteChannelConfig::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CRemoteChannelConfig)
	DDX_Control(pDX, IDC_PRERECORDTIME, m_PreRecordTime);
	DDX_Control(pDX, IDC_DELAY, m_DelayCtrl);
	DDX_Control(pDX, IDC_OSDTYPE, m_OsdType);
	DDX_Control(pDX, IDC_OSDATTRIB, m_OsdAttrib);
	DDX_Control(pDX, IDC_LOGOATTRIB, m_LogoAttrib);
	DDX_Control(pDX, IDC_COMBOCOPYCHAN, m_CopyChannelCtrl);
	DDX_Control(pDX, IDC_COMCHAN, m_ChannelCtrl);
	DDX_Control(pDX, IDC_COMBOSTREAMTYPE, m_StreamTypeCtrl);
	DDX_Control(pDX, IDC_COMBORESOLUTION, m_ResolutionCtrl);
	DDX_Control(pDX, IDC_COMBOIMAGEQUALITY, m_ImageQualityCtrl);
	DDX_Control(pDX, IDC_COMBOBITRATETYPE, m_BitRateTypeCtrl);
	DDX_Control(pDX, IDC_COMBOFRAMERATE, m_FrameRateCtrl);
	DDX_Control(pDX, IDC_COMBOBITRATE, m_BitRateCtrl);
	DDX_Text(pDX, IDC_CHANNELNAME, m_ChannelName);
	DDX_Check(pDX, IDC_CHKLOGO, m_bLogo);
	DDX_Check(pDX, IDC_CHKOSD, m_bOsd);
	DDX_Check(pDX, IDC_CHKRECORD, m_bRecord);
	DDX_Check(pDX, IDC_CHKHIDEAREA, m_bHide);
	DDX_Text(pDX, IDC_CHANNAME_X, m_channame_x);
	DDX_Text(pDX, IDC_CHANNAME_Y, m_channame_y);
	DDX_Check(pDX, IDC_CHKCHANNAME, m_bChanname);
	DDX_Check(pDX, IDC_CHKDISPWEEK, m_bDispWeek);
	DDX_Text(pDX, IDC_LOGO_X, m_logo_x);
	DDX_Text(pDX, IDC_LOGO_Y, m_logo_y);
	DDX_Text(pDX, IDC_OSD_Y, m_osd_y);
	DDX_Text(pDX, IDC_OSD_X, m_osd_x);
	DDX_Check(pDX, IDC_CHKMOTION, m_bMotion);
	DDX_Check(pDX, IDC_CHKHIDEALARM, m_bHideAlarm);
	DDX_Text(pDX, IDC_EDITBITRATE, m_BitRate);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CRemoteChannelConfig, CDialog)
	//{{AFX_MSG_MAP(CRemoteChannelConfig)
	ON_BN_CLICKED(IDC_BUTCHANCOPY, OnButchancopy)
	ON_BN_CLICKED(IDC_BUTMOTION, OnButmotion)
	ON_BN_CLICKED(IDC_BUTRECORD, OnButrecord)
	ON_BN_CLICKED(IDC_CHKRECORD, OnChkrecord)
	ON_BN_CLICKED(IDC_BUTHIDE, OnButhide)
	ON_BN_CLICKED(IDC_CHKHIDEAREA, OnChkhidearea)
	ON_BN_CLICKED(IDC_CHKOSD, OnChkosd)
	ON_BN_CLICKED(IDC_CHKLOGO, OnChklogo)
	ON_BN_CLICKED(IDC_CHKCHANNAME, OnChkchanname)
	ON_CBN_SELCHANGE(IDC_COMCHAN, OnSelchangeComchan)
	ON_CBN_SELCHANGE(IDC_COMBOCOPYCHAN, OnSelchangeCombocopychan)
	ON_BN_CLICKED(IDCHANCFGOK, OnChancfgok)
	ON_BN_CLICKED(IDCHANCFGEXIT, OnChancfgexit)
	ON_BN_CLICKED(IDC_REMOTERECORD, OnRemoterecord)
	ON_BN_CLICKED(IDC_CHKMOTION, OnChkmotion)
	ON_BN_CLICKED(IDC_CHKHIDEALARM, OnChkhidealarm)
	ON_BN_CLICKED(IDC_BUTHIDEALARM, OnButhidealarm)
	ON_CBN_SELCHANGE(IDC_COMBOBITRATE, OnSelchangeCombobitrate)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRemoteChannelConfig message handlers

BOOL CRemoteChannelConfig::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	CRect rc(0, 0, 0, 0);
	GetParent()->GetClientRect(&rc);
	((CTabCtrl*)GetParent())->AdjustRect(FALSE, &rc);
	MoveWindow(&rc);

	CString sTemp;
	char cTemp[100];
	m_nChanSel = 0;
	m_nCopyChanNum = -1;
	m_CopyChannelCtrl.ResetContent();
	m_ChannelCtrl.ResetContent();	
	sTemp.Format(_T("全部通道"));
	m_CopyChannelCtrl.AddString(sTemp);

	for(int i=0; i<m_iChannelnumber; i++)
	{
		sTemp.Format("通道%d", (m_lStartChannel+i));
		m_ChannelCtrl.AddString(sTemp);
		m_CopyChannelCtrl.AddString(sTemp);
		m_nChanNum = i+m_lStartChannel;
		bSetChannelPara[i] = FALSE;
		bGetChannelPara[i] = FALSE;
		bRemoteRecord[i] = FALSE;
		if(m_bConnectServer)
		{
			if(GetChanPara(i))
			{
				bGetChannelPara[i] = TRUE;
			}
			else
			{
				sTemp.Format("获取%d通道参数失败!",m_lStartChannel+i);
				AfxMessageBox(sTemp);
			}
		}
	}
	m_ChannelCtrl.SetCurSel(m_nChanSel);
	m_CopyChannelCtrl.SetCurSel(m_nChanSel);
	m_nChanNum = m_nChanSel+m_lStartChannel;
	if(bGetChannelPara[m_nChanSel])
	{
		//目前网传时的结构中无信息,暂时显示录像参数
		if((m_compressioncfg[m_nChanSel].struRecordPara.dwVideoBitrate >> 31) && 0x01)
		{
			GetDlgItem(IDC_EDITBITRATE)->EnableWindow(TRUE);
			m_BitRateCtrl.SetCurSel(24);		//自定义码流
			m_BitRate = m_compressioncfg[m_nChanSel].struRecordPara.dwVideoBitrate & 0x7fffffff;
		}
		else
		{
			m_BitRateCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.dwVideoBitrate);			
			m_BitRate = 0;
			GetDlgItem(IDC_EDITBITRATE)->EnableWindow(FALSE);
		}
		
		m_ResolutionCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byResolution);
		m_StreamTypeCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byStreamType);
		m_ImageQualityCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byPicQuality);
		m_BitRateTypeCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byBitrateType);
		m_FrameRateCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.dwVideoFrameRate);		
		
		m_bRecord = m_record[m_nChanSel].dwRecord;
		GetDlgItem(IDC_BUTRECORD)->EnableWindow(m_bRecord);
		m_DelayCtrl.SetCurSel(m_record[m_nChanSel].dwRecordTime);
		m_PreRecordTime.SetCurSel(m_record[m_nChanSel].dwPreRecordTime);
		ZeroMemory(cTemp, 100);
		memcpy(cTemp, m_piccfg[m_nChanSel].sChanName, NAME_LEN);
		m_ChannelName.Format("%s",cTemp);
		m_bHide = m_piccfg[m_nChanSel].dwEnableHide;
		GetDlgItem(IDC_BUTHIDE)->EnableWindow(m_bHide);
		m_bMotion = m_piccfg[m_nChanSel].struMotion.byEnableHandleMotion;
		GetDlgItem(IDC_BUTMOTION)->EnableWindow(m_bMotion);
		if(m_piccfg[m_nChanSel].strHideAlarm.dwEnableHideAlarm > 0)
		{
			m_bHideAlarm = TRUE;
		}
		else
		{
			m_bHideAlarm = FALSE;
		}
		GetDlgItem(IDC_BUTHIDEALARM)->EnableWindow(m_bHideAlarm);
		m_bChanname = m_piccfg[m_nChanSel].dwShowChanName;
		m_channame_x = m_piccfg[m_nChanSel].wShowNameTopLeftX;
		m_channame_y = m_piccfg[m_nChanSel].wShowNameTopLeftY;
		m_bOsd = m_piccfg[m_nChanSel].dwShowOsd;
		m_osd_x = m_piccfg[m_nChanSel].wOSDTopLeftX;
		m_osd_y = m_piccfg[m_nChanSel].wOSDTopLeftY;
		m_bDispWeek = m_piccfg[m_nChanSel].byDispWeek;
		m_OsdAttrib.SetCurSel(m_piccfg[m_nChanSel].byOSDAttrib-1);
		m_OsdType.SetCurSel(m_piccfg[m_nChanSel].byOSDType);
		m_bLogo = m_piccfg[m_nChanSel].dwShowLogo;
		m_logo_x = m_piccfg[m_nChanSel].wLOGOTopLeftX;
		m_logo_y = m_piccfg[m_nChanSel].wLOGOTopLeftY;
		TRACE("LOGO属性: %d", m_piccfg[m_nChanSel].byLogoAttrib);
		m_LogoAttrib.SetCurSel(m_piccfg[m_nChanSel].byLogoAttrib-1);
		EnableChanname(m_bChanname);
		EnableOsd(m_bOsd);
		EnableLogo(m_bLogo);
		GetDlgItem(IDCHANCFGOK)->EnableWindow(TRUE);
	}
	else
	{
		GetDlgItem(IDCHANCFGOK)->EnableWindow(FALSE);
	}
/*	NET_DVR_PREVIEWCFG m_VideoOut;
	DWORD dwReturned;
	if(!NET_DVR_GetDVRConfig(m_lServerID, NET_DVR_GET_PREVIEWCFG, 0,&m_VideoOut, sizeof(NET_DVR_PREVIEWCFG), &dwReturned))
	{
		CString sTemp;
		sTemp.Format("ERROR: NET_DVR_GET_VIDEOOUTCFG = %d \n", NET_DVR_GetLastError());
		TRACE(sTemp);
		return FALSE;
	}
*/
	UpdateData(FALSE);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BOOL CRemoteChannelConfig::GetChanPara(int nIndex)
{ 
	DWORD dwReturned;	
	if(!NET_DVR_GetDVRConfig(m_lServerID, NET_DVR_GET_PICCFG, m_nChanNum,&m_piccfg[nIndex], sizeof(NET_DVR_PICCFG), &dwReturned))
	{
		CString sTemp;
		sTemp.Format("%d : NET_DVR_GET_PICCFG = %d \n", m_nChanNum, NET_DVR_GetLastError());
		TRACE(sTemp);
		return FALSE;
	}
	if(!NET_DVR_GetDVRConfig(m_lServerID,NET_DVR_GET_COMPRESSCFG, m_nChanNum,&m_compressioncfg[nIndex], sizeof(NET_DVR_COMPRESSIONCFG), &dwReturned))
	{
		CString sTemp;
		sTemp.Format("%d : ERROR: NET_DVR_GET_COMPRESSCFG = %d \n", m_nChanNum, NET_DVR_GetLastError());
		TRACE(sTemp); 
		return FALSE;
	}
	if(!NET_DVR_GetDVRConfig(m_lServerID,NET_DVR_GET_RECORDCFG, m_nChanNum,&m_record[nIndex], sizeof(NET_DVR_RECORD), &dwReturned))	
	{
		CString sTemp;
		sTemp.Format("%d : ERROR: NET_DVR_GET_RECORDCFG = %d \n", m_nChanNum, NET_DVR_GetLastError());
		TRACE(sTemp);	
		return FALSE;
	}
	return TRUE;
}

void CRemoteChannelConfig::OnButchancopy() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	int nTemp = 0;
	
	if(m_nCopyChanNum == m_nChanSel)
		return;
	if(m_nCopyChanNum == -1)
	{
		for(int i=0; i<m_iChannelnumber; i++)
		{
			if(i == m_nChanSel)
				continue;
			m_compressioncfg[i].struRecordPara.byStreamType = m_StreamTypeCtrl.GetCurSel();
			m_compressioncfg[i].struRecordPara.byPicQuality = m_ImageQualityCtrl.GetCurSel();
			if(m_BitRateCtrl.GetCurSel() == 24)	//自定义码流
			{
				nTemp = m_BitRate;
				nTemp |= 0x80000000;
				m_compressioncfg[i].struRecordPara.dwVideoBitrate = nTemp;
			}
			else
			{
				m_compressioncfg[i].struRecordPara.dwVideoBitrate = m_BitRateCtrl.GetCurSel();
			}
			
			m_compressioncfg[i].struRecordPara.byResolution = m_ResolutionCtrl.GetCurSel();
			m_compressioncfg[i].struRecordPara.dwVideoFrameRate = m_FrameRateCtrl.GetCurSel();
			m_compressioncfg[i].struRecordPara.byBitrateType = m_BitRateTypeCtrl.GetCurSel();			
			m_record[i].dwRecord = m_bRecord;
			m_record[i].dwRecordTime = m_DelayCtrl.GetCurSel();
			m_record[i].dwPreRecordTime = m_PreRecordTime.GetCurSel();
			//复制时间表
			for(int k=0; k<MAX_DAYS; k++)
			{
				memcpy(&(m_record[i].struRecAllDay[k]), &(m_record[m_nChanSel].struRecAllDay[k]), sizeof(NET_DVR_RECORDDAY));
				for(int j=0; j<MAX_TIMESEGMENT; j++)
				{
					memcpy(&m_record[i].struRecordSched[k][j],&m_record[m_nChanSel].struRecordSched[k][j],sizeof(NET_DVR_RECORDSCHED));				
				}
			}

			m_piccfg[i].dwEnableHide = m_bHide;
			m_piccfg[i].struMotion.byEnableHandleMotion = m_bMotion;			
			if(!m_bHideAlarm)
			{
				m_piccfg[i].strHideAlarm.dwEnableHideAlarm = m_bHideAlarm;
			}
			m_piccfg[i].dwShowChanName = m_bChanname;
			m_piccfg[i].wShowNameTopLeftX = m_channame_x;
			m_piccfg[i].wShowNameTopLeftY = m_channame_y;
			m_piccfg[i].dwShowOsd = m_bOsd;
			m_piccfg[i].wOSDTopLeftX = m_osd_x;
			m_piccfg[i].wOSDTopLeftY = m_osd_y;
			m_piccfg[i].byDispWeek = m_bDispWeek;
			m_piccfg[i].byOSDAttrib = m_OsdAttrib.GetCurSel()+1;
			m_piccfg[i].byOSDType = m_OsdType.GetCurSel();
			m_piccfg[i].dwShowLogo = m_bLogo;
			m_piccfg[i].wLOGOTopLeftX = m_logo_x;
			m_piccfg[i].wLOGOTopLeftY = m_logo_y;
			m_piccfg[i].byLogoAttrib = m_LogoAttrib.GetCurSel()+1;
			//复制视频参数
			m_piccfg[i].byBrightness = m_piccfg[m_nChanSel].byBrightness;
			m_piccfg[i].byContrast = m_piccfg[m_nChanSel].byContrast;
			m_piccfg[i].byHue = m_piccfg[m_nChanSel].byHue;
			m_piccfg[i].bySaturation = m_piccfg[m_nChanSel].bySaturation;
			
			bSetChannelPara[i] = TRUE;
		}		
	}
	else
	{
		m_compressioncfg[m_nCopyChanNum].struRecordPara.byStreamType = m_StreamTypeCtrl.GetCurSel();
		m_compressioncfg[m_nCopyChanNum].struRecordPara.byPicQuality = m_ImageQualityCtrl.GetCurSel();
		if(m_BitRateCtrl.GetCurSel() == 24)	//自定义码流
		{
			nTemp = m_BitRate;
			nTemp |= 0x80000000;
			m_compressioncfg[m_nCopyChanNum].struRecordPara.dwVideoBitrate = nTemp;
		}
		else
		{
			m_compressioncfg[m_nCopyChanNum].struRecordPara.dwVideoBitrate = m_BitRateCtrl.GetCurSel();
		}
		m_compressioncfg[m_nCopyChanNum].struRecordPara.byResolution = m_ResolutionCtrl.GetCurSel();
		m_compressioncfg[m_nCopyChanNum].struRecordPara.dwVideoFrameRate = m_FrameRateCtrl.GetCurSel();
		m_compressioncfg[m_nCopyChanNum].struRecordPara.byBitrateType = m_BitRateTypeCtrl.GetCurSel();			

		m_record[m_nCopyChanNum].dwRecord = m_bRecord;
		m_record[m_nCopyChanNum].dwRecordTime = m_DelayCtrl.GetCurSel();
		m_record[m_nCopyChanNum].dwPreRecordTime = m_PreRecordTime.GetCurSel();
		
		//复制时间表
		for(int k=0; k<MAX_DAYS; k++)
		{
			memcpy(&(m_record[m_nCopyChanNum].struRecAllDay[k]), &(m_record[m_nChanSel].struRecAllDay[k]), sizeof(NET_DVR_RECORDDAY));
			for(int j=0; j<MAX_TIMESEGMENT; j++)
			{
				memcpy(&m_record[m_nCopyChanNum].struRecordSched[k][j],&m_record[m_nChanSel].struRecordSched[k][j],sizeof(NET_DVR_RECORDSCHED));				
			}
		}
		m_piccfg[m_nCopyChanNum].dwEnableHide = m_bHide;
		m_piccfg[m_nCopyChanNum].struMotion.byEnableHandleMotion = m_bMotion;
		if(!m_bHideAlarm)
		{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -