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

📄 channelconfig.cpp

📁 用大华sdk
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// ChannelConfig.cpp : implementation file
//

#include "stdafx.h"
#include "netsdkdemo.h"
#include "ChannelConfig.h"
#include "SetHide.h"
#include "NetSDKDemoDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CChannelConfig dialog
#include "TimingRecord.h"

CChannelConfig::CChannelConfig(CWnd* pParent /*=NULL*/)
	: CDialog(CChannelConfig::IDD, pParent)
{
	//{{AFX_DATA_INIT(CChannelConfig)
	m_rec_ratectrl = 0;
	m_net_ratectrl = 0;
	m_channelname = _T("");
	m_bHide = FALSE;
	m_bHideAlarm = FALSE;
	m_bMotion = FALSE;
	m_bOSD = FALSE;
	m_bChannelName = FALSE;
	m_bTimingRecord = FALSE;
	m_bVLostAlarm = FALSE;
	m_channelname_X = 0;
	m_channelname_Y = 0;
	m_osd_X = 0;
	m_osd_Y = 0;
	m_bOSDWeek = FALSE;
	//}}AFX_DATA_INIT
}


void CChannelConfig::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CChannelConfig)
	DDX_Control(pDX, IDC_OSD_TIMEFORMATSEL, m_osd_timeformatsel);
	DDX_Control(pDX, IDC_OSD_DISTYPESEL, m_osd_distypesel);
	DDX_Control(pDX, IDC_PRERECORDTIME, m_prerecordsel);
	DDX_Control(pDX, IDC_RECORDDELAY, m_recorddelaysel);
	DDX_Control(pDX, IDC_FRAMERATESEL2, m_net_frameratesel);
	DDX_Control(pDX, IDC_FRAMERATESEL, m_rec_frameratesel);
	DDX_Control(pDX, IDC_CHANNELSEL, m_channelsel);
	DDX_Control(pDX, IDC_COPYCHANNELSEL, m_copychannelsel);
	DDX_Control(pDX, IDC_RATECTRLSEL2, m_net_ratectrlsel);
	DDX_Control(pDX, IDC_RATECTRLSEL, m_rec_ratectrlsel);
	DDX_Control(pDX, IDC_RATETYPESEL2, m_net_ratetypesel);
	DDX_Control(pDX, IDC_RATETYPESEL, m_rec_ratetypesel);
	DDX_Control(pDX, IDC_STREAMTYPESEL2, m_net_streamtypesel);
	DDX_Control(pDX, IDC_STREAMTYPESEL, m_rec_streamtypesel);
	DDX_Control(pDX, IDC_SIZESEL2, m_net_imgsizesel);
	DDX_Control(pDX, IDC_SIZESEL, m_rec_imgsizesel);
	DDX_Control(pDX, IDC_IMAGEQUALITY2, m_net_imgqualitysel);
	DDX_Control(pDX, IDC_IMAGEQUALITY, m_rec_imgqualitysel);
	DDX_Text(pDX, IDC_RATECTRL, m_rec_ratectrl);
	DDX_Text(pDX, IDC_RATECTRL2, m_net_ratectrl);
	DDX_Text(pDX, IDC_CHANNELNAME, m_channelname);
	DDX_Check(pDX, IDC_HIDE_CHECK, m_bHide);
	DDX_Check(pDX, IDC_HIDEALARM_CHECK, m_bHideAlarm);
	DDX_Check(pDX, IDC_MOTION_CHECK, m_bMotion);
	DDX_Check(pDX, IDC_OSD_CHECK, m_bOSD);
	DDX_Check(pDX, IDC_CHANNELNAME_CHECK, m_bChannelName);
	DDX_Check(pDX, IDC_TIMINGRECORD_CHECK, m_bTimingRecord);
	DDX_Check(pDX, IDC_VLOSTALARM_CHECK, m_bVLostAlarm);
	DDX_Text(pDX, IDC_CHANNELNAME_X, m_channelname_X);
	DDX_Text(pDX, IDC_CHANNELNAME_Y, m_channelname_Y);
	DDX_Text(pDX, IDC_OSD_X, m_osd_X);
	DDX_Text(pDX, IDC_OSD_Y, m_osd_Y);
	DDX_Check(pDX, IDC_OSDWEEK_CHECK, m_bOSDWeek);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CChannelConfig, CDialog)
	//{{AFX_MSG_MAP(CChannelConfig)
	ON_CBN_SELCHANGE(IDC_CHANNELSEL, OnSelchangeChannelsel)
	ON_BN_CLICKED(IDC_APPLY, OnApply)
	ON_BN_CLICKED(IDC_SETTIMINGRECORD, OnSettimingrecord)
	ON_BN_CLICKED(IDC_TIMINGRECORD_CHECK, OnTimingrecordCheck)
	ON_BN_CLICKED(IDC_HIDE_CHECK, OnHideCheck)
	ON_BN_CLICKED(IDC_MOTION_CHECK, OnMotionCheck)
	ON_BN_CLICKED(IDC_HIDEALARM_CHECK, OnHidealarmCheck)
	ON_BN_CLICKED(IDC_VLOSTALARM_CHECK, OnVlostalarmCheck)
	ON_BN_CLICKED(IDC_OSD_CHECK, OnOsdCheck)
	ON_BN_CLICKED(IDC_CHANNELNAME_CHECK, OnChannelnameCheck)
	ON_BN_CLICKED(IDC_SETHIDE, OnSethide)
	ON_BN_CLICKED(IDC_RESTORE, OnRestore)
	ON_CBN_SELCHANGE(IDC_RATECTRLSEL, OnSelchangeRatectrlsel)
	ON_CBN_SELCHANGE(IDC_RATECTRLSEL2, OnSelchangeRatectrlsel2)
	ON_BN_CLICKED(IDC_SAVECHANNELNAME, OnSavechannelname)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CChannelConfig message handlers

BOOL CChannelConfig::OnInitDialog() 
{
	CDialog::OnInitDialog();
	g_SetWndStaticText(this);

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

	//初始化界面
	m_rec_imgqualitysel.InsertString(0, MSG_CHANNELCFG_PQWORST);
	m_rec_imgqualitysel.InsertString(1, MSG_CHANNELCFG_PQWORSE);
	m_rec_imgqualitysel.InsertString(2, MSG_CHANNELCFG_PQNORMAL);
	m_rec_imgqualitysel.InsertString(3, MSG_CHANNELCFG_PQGOOD);
	m_rec_imgqualitysel.InsertString(4, MSG_CHANNELCFG_PQBETTER);
	m_rec_imgqualitysel.InsertString(5, MSG_CHANNELCFG_PQBEST);

	m_net_imgqualitysel.InsertString(0, MSG_CHANNELCFG_PQWORST);
	m_net_imgqualitysel.InsertString(1, MSG_CHANNELCFG_PQWORSE);
	m_net_imgqualitysel.InsertString(2, MSG_CHANNELCFG_PQNORMAL);
	m_net_imgqualitysel.InsertString(3, MSG_CHANNELCFG_PQGOOD);
	m_net_imgqualitysel.InsertString(4, MSG_CHANNELCFG_PQBETTER);
	m_net_imgqualitysel.InsertString(5, MSG_CHANNELCFG_PQBEST);

	m_rec_streamtypesel.InsertString(0, MSG_CHANNELCFG_VSTREAM);
	m_rec_streamtypesel.InsertString(1, MSG_CHANNELCFG_CSTREAM);

	m_net_streamtypesel.InsertString(0, MSG_CHANNELCFG_VSTREAM);
	m_net_streamtypesel.InsertString(1, MSG_CHANNELCFG_CSTREAM);

	m_rec_ratetypesel.InsertString(0, MSG_CHANNELCFG_LMRATE);
	m_rec_ratetypesel.InsertString(1, MSG_CHANNELCFG_VRRATE);

	m_net_ratetypesel.InsertString(0, MSG_CHANNELCFG_LMRATE);
	m_net_ratetypesel.InsertString(1, MSG_CHANNELCFG_VRRATE);
	

	CString sTemp;
	char cTemp[100];
	m_nChanSel = 0;
	m_copychannelsel.ResetContent();
	m_channelsel.ResetContent();
	sTemp.Format(_T(NAME_CHANNELCFG_ALLCHANNEL));
	m_copychannelsel.AddString(sTemp);

	for(int i=0; i < m_Device->Info.byChanNum; i++)
	{
		sTemp.Format("%d", i + 1);
		sTemp = NAME_CHANNELCFG_CHANNEL + sTemp;
		m_channelsel.AddString(sTemp);
		m_copychannelsel.AddString(sTemp);
		bSetChannelPara[i] = FALSE;
		bGetChannelPara[i] = FALSE;
		bRemoteRecord[i] = FALSE;
		if(GetChanPara(i))
		{
			bGetChannelPara[i] = TRUE;
		}
		else
		{
			sTemp.Format("%d",i+1);
			sTemp = MSG_CHANNELCFG_GETCHANNELCFGFAILED + sTemp;
			AfxMessageBox(sTemp);
		}
	}
	char buf[512];
	int chancount;	
	int bRet = CLIENT_QueryChannelName(m_Device->LoginID, (char *)buf, 512, &chancount);
	if (bRet) 
	{
		for (int i = 0; i < 16; i++)
		{
			strcpy((char *)m_piccfg[i].sChanName, buf+ 32*i);
		}
	}
	else
	{
		((CNetSDKDemoDlg *)GetParent())->LastError();//Zhengdh 06.11.24
	}
	if (m_channelsel.GetCount() > 0)
	{
		m_channelsel.SetCurSel(m_nChanSel);
	}
	m_copychannelsel.SetCurSel(m_nChanSel);
//	m_nChanNum = m_nChanSel+m_lStartChannel;
	if(bGetChannelPara[m_nChanSel])
	{
		//录像参数
		if((m_compressioncfg[m_nChanSel].struRecordPara.dwVideoBitrate >> 31) && 0x01)
		{
			GetDlgItem(IDC_RATECTRL)->EnableWindow(TRUE);
			m_rec_ratectrlsel.SetCurSel(22);		//自定义码流
			m_rec_ratectrl = m_compressioncfg[m_nChanSel].struRecordPara.dwVideoBitrate & 0x7fffffff;
		}
		else
		{
			m_rec_ratectrlsel.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.dwVideoBitrate-2);			
			m_rec_ratectrl = 0;
			GetDlgItem(IDC_RATECTRL)->EnableWindow(FALSE);
		}
		
		m_rec_imgsizesel.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byResolution);
		m_rec_streamtypesel.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byStreamType);
		m_rec_imgqualitysel.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byPicQuality - 1);
		m_rec_ratetypesel.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byBitrateType);
		m_rec_frameratesel.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.dwVideoFrameRate);		
//2005-07-08 网传参数
		if ((m_compressioncfg[m_nChanSel].struNetPara.dwVideoBitrate >> 31) && 0x01)
		{
			GetDlgItem(IDC_RATECTRL2)->EnableWindow(TRUE);
			m_net_ratectrlsel.SetCurSel(22);		//自定义码流
			m_net_ratectrl = m_compressioncfg[m_nChanSel].struNetPara.dwVideoBitrate & 0x7fffffff;
		}
		else
		{
			m_net_ratectrlsel.SetCurSel(m_compressioncfg[m_nChanSel].struNetPara.dwVideoBitrate-2);			
			m_net_ratectrl = 0;
			GetDlgItem(IDC_RATECTRL2)->EnableWindow(FALSE);
		}
		
		m_net_imgsizesel.SetCurSel(m_compressioncfg[m_nChanSel].struNetPara.byResolution);
		m_net_streamtypesel.SetCurSel(m_compressioncfg[m_nChanSel].struNetPara.byStreamType);
		m_net_imgqualitysel.SetCurSel(m_compressioncfg[m_nChanSel].struNetPara.byPicQuality - 1);
		m_net_ratetypesel.SetCurSel(m_compressioncfg[m_nChanSel].struNetPara.byBitrateType);
		m_net_frameratesel.SetCurSel(m_compressioncfg[m_nChanSel].struNetPara.dwVideoFrameRate);		
//end		
		m_bTimingRecord = m_record[m_nChanSel].dwRecord;
//		GetDlgItem(IDC_SETTIMINGRECORD)->EnableWindow(m_bTimingRecord);
		m_recorddelaysel.SetCurSel(m_record[m_nChanSel].dwRecordTime);
		m_prerecordsel.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_SETHIDE)->EnableWindow(m_bHide);
		m_bMotion = m_piccfg[m_nChanSel].struMotion.byEnableHandleMotion;
		GetDlgItem(IDC_SETMOTION)->EnableWindow(m_bMotion);
		if(m_piccfg[m_nChanSel].struHideAlarm.dwEnableHideAlarm > 0)
		{
			m_bHideAlarm = TRUE;
		}
		else
		{
			m_bHideAlarm = FALSE;
		}

		GetDlgItem(IDC_SETHIDEALARM)->EnableWindow(m_bHideAlarm);
		m_bChannelName = m_piccfg[m_nChanSel].dwShowChanName;
		m_channelname_X = m_piccfg[m_nChanSel].wShowNameTopLeftX;
		m_channelname_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_bOSDWeek = m_piccfg[m_nChanSel].byDispWeek;
		m_osd_distypesel.SetCurSel(m_piccfg[m_nChanSel].byOSDAttrib-1);
		m_osd_timeformatsel.SetCurSel(m_piccfg[m_nChanSel].byOSDType);
		EnableChanname(m_bChannelName);
		EnableOSD(m_bOSD);
		m_bVLostAlarm = m_piccfg[m_nChanSel].struVILost.byEnableHandleVILost;
		GetDlgItem(IDC_SETVLOSTALARM)->EnableWindow(m_bVLostAlarm);
		GetDlgItem(IDC_APPLY)->EnableWindow(TRUE);
		GetDlgItem(IDC_RESTORE)->EnableWindow(TRUE);
	}
	else
	{
		GetDlgItem(IDC_APPLY)->EnableWindow(FALSE);
		GetDlgItem(IDC_RESTORE)->EnableWindow(FALSE);
	}

	UpdateData(FALSE);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BOOL CChannelConfig::GetChanPara(int nIndex)
{ 
	DWORD dwReturned;	
	if(!CLIENT_GetDevConfig(m_Device->LoginID, DEV_GET_PICCFG, nIndex ,&m_piccfg[nIndex], sizeof(NET_DEV_PICCFG), &dwReturned))
	{
			return FALSE;
	}
	if(!CLIENT_GetDevConfig(m_Device->LoginID,DEV_GET_COMPRESSCFG, nIndex,&m_compressioncfg[nIndex], sizeof(NET_DEV_COMPRESSIONCFG), &dwReturned))
	{
			return FALSE;
	}
/*
	if(!CLIENT_GetDevConfig(m_Device->LoginID,NET_DVR_GET_RECORDCFG, nIndex + 1,&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 CChannelConfig::EnableChanname(BOOL bEnable) 
{
	GetDlgItem(IDC_CHANNELNAME_X)->EnableWindow(bEnable);
	GetDlgItem(IDC_CHANNELNAME_Y)->EnableWindow(bEnable);
}

void CChannelConfig::EnableOSD(BOOL bEnable) 
{
	GetDlgItem(IDC_OSD_X)->EnableWindow(bEnable);
	GetDlgItem(IDC_OSD_Y)->EnableWindow(bEnable);
	GetDlgItem(IDC_OSD_DISTYPESEL)->EnableWindow(bEnable);
	GetDlgItem(IDC_OSD_TIMEFORMATSEL)->EnableWindow(bEnable);
	GetDlgItem(IDC_OSDWEEK_CHECK)->EnableWindow(bEnable);
}

void CChannelConfig::OnSelchangeChannelsel() 
{
	m_nChanSel = m_channelsel.GetCurSel();
	char cTemp[100];
	if(!bGetChannelPara[m_nChanSel])
	{		
		if(GetChanPara(m_nChanSel))
		{
			char buf[512];
			int chancount;	
			int bRet = CLIENT_QueryChannelName(m_Device->LoginID, (char *)buf, 512, &chancount);
			if (bRet) 
			{
				for (int i = 0; i < 16; i++)
				{
					strcpy((char *)m_piccfg[i].sChanName, buf+ 32*i);
				}
			}
			else
			{
				((CNetSDKDemoDlg *)GetParent())->LastError();//Zhengdh 06.11.24
			}
			bGetChannelPara[m_nChanSel] = TRUE;
		}
		else

⌨️ 快捷键说明

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