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

📄 rightrec.cpp

📁 实时监控
💻 CPP
字号:
// RightRec.cpp : implementation file
//

#include "stdafx.h"

#include "..\dvrmanager.h"
#include "net.h"
#include "RightRec.h"
#include "../utils/common.h"
#include "../utils/custom_msgs.h"
#include "msgbox.h"
#include "ip_port.h"
#include "RightLogin.h"


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

/////////////////////////////////////////////////////////////////////////////
// CRightRec dialog

#define FR_MAX_PAL	25
#define FR_MAX_NTSC	30

const UINT FR_MIN = 2;
UINT FR_MAX = FR_MAX_PAL;
//##ModelId=3F90BAAD02E0
CRightRec::CRightRec(CWnd* pParent /*=NULL*/)
	: baseclass(CRightRec::IDD, pParent), last_channel(-1)
{
	//{{AFX_DATA_INIT(CRightRec)
	m_ck1 = FALSE;
	m_ck2 = FALSE;
	m_ck3 = FALSE;
	m_ck4 = FALSE;
	m_ck5 = FALSE;
	m_ck6 = FALSE;
	m_ck7 = FALSE;
	m_ck8 = FALSE;
	m_ck9 = FALSE;
	m_ck10 = FALSE;
	m_ck11 = FALSE;
	m_ck12 = FALSE;
	m_ck13 = FALSE;
	m_ck14 = FALSE;
	m_ck15 = FALSE;
	m_ck16 = FALSE;
	
	m_channel = -1;
	m_which = -1;
	m_date_overlay = FALSE;
	m_rec_audio = FALSE;
	m_time_overlay = FALSE;
	m_overwriting = 0;
	m_chinese = 0;
	m_framerate = 2;
	m_res = 0;
	m_vstd = 0;
	//}}AFX_DATA_INIT

	ZeroMemory(&opt, sizeof(opt));
	ZeroMemory(&opt1, sizeof(opt1));
	rec_opt = 0;
}


//##ModelId=3F90BAAE025F
void CRightRec::DoDataExchange(CDataExchange* pDX)
{
	if( !pDX->m_bSaveAndValidate )
	{
		if( IsWindow(m_video_quality.m_hWnd) )
			m_video_quality.SetPos(m_vq);
	}
	m_framerate = max(FR_MIN, min(FR_MAX,(m_framerate)));
	FR_MAX = m_vstd?FR_MAX_NTSC:FR_MAX_PAL;

	baseclass::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CRightRec)
	DDX_Control(pDX, ID_12, m_12);
	DDX_Control(pDX, ID_11, m_11);
	DDX_Control(pDX, ID_10, m_10);
	DDX_Control(pDX, ID_8, m_8);
	DDX_Control(pDX, IDSL_VIDEO_QUALITY, m_video_quality);
	DDX_Control(pDX, ID_S, m_s);
	DDX_Check(pDX, ID_CK1, m_ck1);
	DDX_Check(pDX, ID_CK2, m_ck2);
	DDX_Check(pDX, ID_CK3, m_ck3);
	DDX_Check(pDX, ID_CK4, m_ck4);
	DDX_Check(pDX, ID_CK5, m_ck5);
	DDX_Check(pDX, ID_CK6, m_ck6);
	DDX_Check(pDX, ID_CK7, m_ck7);
	DDX_Check(pDX, ID_CK8, m_ck8);
	DDX_Check(pDX, ID_CK9, m_ck9);
	DDX_Check(pDX, ID_CK10, m_ck10);
	DDX_Check(pDX, ID_CK11, m_ck11);
	DDX_Check(pDX, ID_CK12, m_ck12);
	DDX_Check(pDX, ID_CK13, m_ck13);
	DDX_Check(pDX, ID_CK14, m_ck14);
	DDX_Check(pDX, ID_CK15, m_ck15);
	DDX_Check(pDX, ID_CK16, m_ck16);

	DDX_Control(pDX, ID_CK1, m_ck01);
	DDX_Control(pDX, ID_CK2, m_ck02);
	DDX_Control(pDX, ID_CK3, m_ck03);
	DDX_Control(pDX, ID_CK4, m_ck04);
	DDX_Control(pDX, ID_CK5, m_ck05);
	DDX_Control(pDX, ID_CK6, m_ck06);
	DDX_Control(pDX, ID_CK7, m_ck07);
	DDX_Control(pDX, ID_CK8, m_ck08);
	DDX_Control(pDX, ID_CK9, m_ck09);

	DDX_Control(pDX, ID_CK10, m_ck10t);
	DDX_Control(pDX, ID_CK11, m_ck11t);
	DDX_Control(pDX, ID_CK12, m_ck12t);
	DDX_Control(pDX, ID_CK13, m_ck13t);
	DDX_Control(pDX, ID_CK14, m_ck14t);
	DDX_Control(pDX, ID_CK15, m_ck15t);
	DDX_Control(pDX, ID_CK16, m_ck16t);

	DDX_Control(pDX, IDCB_RES, m_sel_mode);
	DDX_Control(pDX, IDCK_TIME_OVERLAY, m_ck_3);
	DDX_Control(pDX, IDCK_REC_AUDIO, m_ck_2);
	DDX_Control(pDX, ID_9, m_9);
	DDX_Control(pDX, ID_7, m_7);
	DDX_Control(pDX, IDC_RADIO2, m_rd2);
	DDX_Control(pDX, IDRD_OVERWRITING, m_rd1);
	DDX_Control(pDX, IDRD_CHINESE, m_rd3);
	DDX_Control(pDX, IDC_RADIO1, m_rd4);
	DDX_Control(pDX, IDCK_DATE_OVERLAY, m_ck_1);
	DDX_Control(pDX, IDCB_WHICH, m_cbwhich);
	DDX_Control(pDX, IDCB_CHANNEL, m_cbchannel);
	DDX_Control(pDX, IDBTN_SET, m_btn_set);
	DDX_Control(pDX, IDBTN_REFRESH, m_btn_refresh);
	DDX_Control(pDX, ID_6, m_6);
	DDX_Control(pDX, ID_2, m_2);
	DDX_Control(pDX, ID_TITLE, m_title);
	DDX_Control(pDX, ID_5, m_5);
//	DDX_Control(pDX, ID_3, m_3);
	DDX_Control(pDX, ID_1, m_1);
	DDX_CBIndex(pDX, IDCB_CHANNEL, m_channel);
	DDX_CBIndex(pDX, IDCB_WHICH, m_which);
	DDX_Check(pDX, IDCK_DATE_OVERLAY, m_date_overlay);
	DDX_Check(pDX, IDCK_REC_AUDIO, m_rec_audio);
	DDX_Check(pDX, IDCK_TIME_OVERLAY, m_time_overlay);
	DDX_Radio(pDX, IDRD_OVERWRITING, m_overwriting);
	DDX_Radio(pDX, IDRD_CHINESE, m_chinese);
	DDX_Text(pDX, IDED_FRAMERATE, m_framerate);
	DDX_CBIndex(pDX, IDCB_RES, m_res);
	DDX_Radio(pDX, IDRD_PAL, m_vstd);
	//}}AFX_DATA_MAP

	if( !IsWindow(m_ck01.m_hWnd ) )
		return;
	CString alias;
	m_cbwhich.GetWindowText(alias);

	ULONG ip;
	USHORT port;
	
	if( alias.IsEmpty() )
		return;
	get_addr(alias, ip, port);
	int chnls = get_chnls(ip,port);
	if(check_2000_version(ip,port) || check_2100_version(ip,port) ||
		check_16_version(ip,port)|| check_4008_version(ip,port))
	{
		m_sel_mode.SetCurSel(0);
		m_sel_mode.EnableWindow(FALSE);
	}
	if(check_2000_version(ip,port))
	{
		m_framerate = 10;
	    GetDlgItem(IDED_FRAMERATE)->EnableWindow(FALSE);
		GetDlgItem(IDC_SPIN1)->EnableWindow(FALSE);
	}
		

	UINT ids[] = {ID_CK1,ID_CK2,ID_CK3,ID_CK4,ID_CK5,ID_CK6,ID_CK7,ID_CK8,ID_CK9,
					ID_CK10,ID_CK11,ID_CK12,ID_CK13,ID_CK14,ID_CK15,ID_CK16};
	for( int i=0; i<16; i++ )
	{
		GetDlgItem(ids[i])->EnableWindow(i<chnls);
	}

	if( pDX->m_bSaveAndValidate )
	{
		m_vq = m_video_quality.GetPos();
	}

}


BEGIN_MESSAGE_MAP(CRightRec, baseclass)
	//{{AFX_MSG_MAP(CRightRec)
	ON_CBN_SELCHANGE(IDCB_WHICH, OnSelchangeWhich)
	ON_BN_CLICKED(IDBTN_REFRESH, OnRefresh)
	ON_BN_CLICKED(IDBTN_SET, OnSet)
	ON_CBN_SELCHANGE(IDCB_CHANNEL, OnSelchangeChannel)
	ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN1, OnDeltaposSpin1)
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_UPDATE_DATA, on_update_data)
	MSG2(NTM_OPT_GET_OK, on_get_ok)
	MSG2(NTM_OPT_SET_OK, on_set_ok)
	MSG2(WM_LOGGED_OUT, on_logged_out)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRightRec message handlers

extern ULONG mpeg4;
//##ModelId=3F90BAAE027D
BOOL CRightRec::OnInitDialog() 
{
	baseclass::OnInitDialog();
	
	init_label(m_1).SetFontBold(TRUE);
//	init_label(m_3);
	init_label(m_5);
	init_label(m_6);
	init_label(m_7);
	init_label(m_9);
	init_label(m_10);
	init_label(m_11);
	init_label(m_12);
	
	init_title(m_title);
	bDisconnect = FALSE;
	if( mpeg4 )
	{
		m_video_quality.SetRange(0, 5);
		m_video_quality.SetTic(6);
		/*
		CString str1, str2;
		m_7.GetWindowText(str1);
		m_9.GetWindowText(str2);
		m_7.SetText(str2);
		m_9.SetText(str1);
		*/
	}
	else
	{
		m_video_quality.SetRange(0, 3);
		m_video_quality.SetTic(4);
	}
	return TRUE ;
}

//##ModelId=3F90BAAE02A6
LRESULT CRightRec::on_update_data(WPARAM w, LPARAM l)
{
	if( w == FALSE )
	{
		if( l == 0 )
		{
			m_channel = opt.channel;
			m_date_overlay = opt.dateoverlay;
			m_time_overlay = opt.timeoverlay;
			m_vq = opt.videoquality-1;
			m_rec_audio = opt.recaudio;
			m_overwriting = opt.overwrite;

//			m_res = opt.resolution;
//			m_framerate = opt.framerate;
//			m_vstd = opt.vstd;
			
			if( mpeg4 )
				m_vq = 6 - opt.videoquality;
		}
		if( l == 1 )
		{
			BOOL* cks[] = {&m_ck1,&m_ck2,&m_ck3,&m_ck4,
							&m_ck5,&m_ck6,&m_ck7,&m_ck8,
							&m_ck9,&m_ck10,&m_ck11,&m_ck12,
							&m_ck13,&m_ck14,&m_ck15,&m_ck16};

			for( int i=0; i<16; i++ )
			{
				DWORD p2 = 1<<i;
				if( rec_opt & p2 )
					*cks[i] = TRUE;
				else
					*cks[i] = FALSE;
			}
		}
		if( l == 2 )	// VIDEO
		{
			m_vstd = opt1.vstd ;
			m_framerate = opt1.framerate;
			m_res = opt1.resolution;
			m_chinese = opt1.ch_en;
		}
	}
	UpdateData(w);
	return 0;
}
bool CRightRec::check_edit_channel()
{
	ULONG ip;
	USHORT port;
	CString alias = get_alias(); 
	if( alias.IsEmpty() ) return false;
	get_addr(alias, ip, port);

	if(check_sel_channel(ip, port, m_channel)) 
		return true;
	else if(check_16_version(ip, port))
	{
		if(m_channel<8) return true;
		else return false;
	}
	else if(check_4008_version(ip, port))
	{
		if(m_channel<4) return true;
		else return false;
	}

	return true;
}


//##ModelId=3F90BAAD0290
void CRightRec::on_join()
{
	m_cbwhich.ResetContent();
	fill_combo(&m_cbwhich);
	m_cbchannel.EnableWindow(FALSE);
}

//##ModelId=3F90BAAD029A
void CRightRec::on_leave()
{
	//m_cbchannel.ResetContent();
}

//##ModelId=3F90BAAD02A4
CString CRightRec::get_alias()
{
	CString alias;

	UpdateData();
	if( m_which == -1 )
		return CString();

	m_cbwhich.GetLBText(m_which, alias);
	return alias;
}

//##ModelId=3F90BAAE027F
void CRightRec::OnSelchangeWhich() 
{
	ULONG ip;
	USHORT port;
	CString alias = get_alias();
	m_cbchannel.EnableWindow(!alias.IsEmpty());
	
	if( alias.IsEmpty() )
		return;
	get_addr(alias, ip, port);

	fill_combo_chnls(alias, &m_cbchannel);
    m_cbchannel.AddString("ALL");
	m_channel = 0;
	if(check_16_version(ip, port) || check_4004_version(ip, port) || check_4008_version(ip, port))
		m_sel_mode.EnableWindow(FALSE);
	else
		m_sel_mode.EnableWindow(TRUE);

	UpdateData(FALSE);

	OnRefresh();
}

//void CRightRec::on_get_ok(DWORD ip, USHORT port, NET_OPTIONS no, void* stuff)
MSG3(on_get_ok, CRightRec)
{
	NET_OPTIONS no = (NET_OPTIONS)w;
	void* stuff = (void*)l;
	if( no == OPT_REC )
	{
		TREC_PARAMETER* p = (TREC_PARAMETER*)stuff;
		if( p->channel != last_channel )
			return 0;

		memcpy(&opt, p, sizeof(opt));
		PostMessage(WM_UPDATE_DATA, FALSE, 0);
	}
	if( no == OPT_REC_ENABLE )
	{
		rec_opt = *(SHORT*)stuff;
		PostMessage(WM_UPDATE_DATA, FALSE, 1);

		/*
		 *	刷新时, 读取完手动录像信息后, 再读取录像参数设置
		 *	否则录像参数设置很难取得.
		 *
		 *	怀疑是如果同时读取两者, 主机端接收读取请求时, 
		 *	当成一个请求了. 后一个请求没有与前一个请求分开, 被主机忽略了.
		 */
		read_rec_options();
	}
	if( no == OPT_VIDEO )
	{
		memcpy(&opt1, stuff, sizeof(opt1));
		PostMessage(WM_UPDATE_DATA, FALSE, 2);
	}
	info_balloon(IDS_REC_GET);
	return 0;
}

//void CRightRec::on_set_ok(DWORD ip, USHORT port, NET_OPTIONS no)
MSG3(on_set_ok, CRightRec)
{
	info_balloon(IDS_REC_SET);
	ip_port *ipport = (ip_port*)l;
	ULONG ip = ipport->get_ip();
	USHORT port = ipport->look_port();
	CRightLogin *rlogin = CRightLogin::the_one();
	if(bDisconnect)		
	{
		rlogin->PostMessage(NTM_CMD_DISCONNECT_TIMEOUT,ip,port);
		rlogin->PostMessage(NTM_USER_LOGOUT,ip,port);
	}
	return 0;
}

void CRightRec::read_rec_enable()
{
	GET_ALIAS;

	get_net_opt(alias, OPT_REC_ENABLE, 0, m_hWnd);

	UINT ids[] = {ID_CK1,ID_CK2,ID_CK3,ID_CK4,ID_CK5,ID_CK6,ID_CK7,ID_CK8,ID_CK9,
					ID_CK10,ID_CK11,ID_CK12,ID_CK13,ID_CK14,ID_CK15,ID_CK16};
	for( int i=0; i<16; i++ )
	{
		GetDlgItem(ids[i])->EnableWindow(FALSE);
	}
}

void CRightRec::read_rec_options()
{
	GET_ALIAS;

	last_channel = m_channel;

	get_net_opt(alias, OPT_REC, m_channel, m_hWnd) ;
	Sleep(10) ;
	get_net_opt(alias, OPT_VIDEO, m_channel, m_hWnd) ;
}

//##ModelId=3F90BAAE0288
void CRightRec::OnRefresh() 
{
	read_rec_enable();
}

//##ModelId=3F90BAAE0292
void CRightRec::OnSet() 
{
	GET_ALIAS;

	ULONG ip;
	USHORT port;
	get_addr(alias, ip, port);
    if(!check_popedom(ip, port, m_channel+1, 2)) return;

	UpdateData() ;
	m_framerate = max(FR_MIN, min(FR_MAX, m_framerate));
	UpdateData(FALSE) ;
    if(check_sel_channel(ip, port, m_channel)) 
	{
		opt.channel = 0xff;
		opt1.channel = 0xff;
	}
	else 
	{
		opt.channel = m_channel;
		opt1.channel = m_channel ;
	}
	opt.overwrite = m_overwriting;
	opt.dateoverlay = m_date_overlay;
	opt.timeoverlay = m_time_overlay;
	opt.videoquality = m_vq + 1;
	opt.recaudio = m_rec_audio;

/*
 *	MPEG4 录像质量: 1~6, 1最高, 6最低
 */
	if( mpeg4 )
		opt.videoquality = 6 - m_vq;

	set_net_opt(alias, OPT_REC, &opt, m_hWnd);

	rec_opt = 0;
	BOOL* cks[] = {&m_ck1,&m_ck2,&m_ck3,&m_ck4,
							&m_ck5,&m_ck6,&m_ck7,&m_ck8,
							&m_ck9,&m_ck10,&m_ck11,&m_ck12,
							&m_ck13,&m_ck14,&m_ck15,&m_ck16};

	for( int i=0; i<16; i++ )
	{
		DWORD p2 = 1<<i;
		if( *cks[i] )
			rec_opt |= p2;
	}
	set_net_opt(alias, OPT_REC_ENABLE, &rec_opt, m_hWnd);

	//////////////////////////////////////////////////////////////////////////
	bDisconnect = FALSE;
	if (opt1.vstd != m_vstd || opt1.ch_en != m_chinese)  {
		if (!confirm_set())
			return ;
		bDisconnect = TRUE;
	}
	opt1.framerate = m_framerate ;
	opt1.resolution = m_res ;
	opt1.vstd = m_vstd ;
	opt1.ch_en = m_chinese;
	set_net_opt(alias, OPT_VIDEO, &opt1, m_hWnd);

	CString m_logfile;
    m_logfile.Format(IDS_RECORD_SETTING,alias,m_channel+1);
    write_log_file(m_logfile);
	
}

bool CRightRec::confirm_set()
{
	if( IDOK == msgbox(IDS_CONFIRM_SET_PAL, IDS_CONFIRM_SET_SYS_TITLE, MB_OKCANCEL | MB_ICONQUESTION, this) )
		return true;
	return false;
}
//##ModelId=3F90BAAE029C
void CRightRec::OnSelchangeChannel() 
{
	UpdateData();
	//OnRefresh();
	read_rec_options();
	m_ck_2.EnableWindow(check_edit_channel());
	ULONG ip;
	USHORT port;
	CString alias = get_alias();
	if( alias.IsEmpty() )
		return;
	get_addr(alias, ip, port);
	if(check_2000_version(ip,port) || check_2100_version(ip,port))
	{
		int cnt = get_chnls(ip,port);
		if(m_channel>5||(m_channel>3 && (check_2000_version(ip,port)&& cnt==8)))
			GetDlgItem(IDCK_REC_AUDIO)->EnableWindow(FALSE);			
	}
	CString str;
	m_cbchannel.GetWindowText(str);
	if(str == "ALL")
		GetDlgItem(IDCK_REC_AUDIO)->EnableWindow(TRUE);
	if(check_version(ip,port,priv6008V) || check_version(ip,port,priv6016V))
		GetDlgItem(IDCK_REC_AUDIO)->EnableWindow(FALSE);
	if(check_version(ip,port,priv6008) || check_version(ip,port,priv6016))
		GetDlgItem(IDCK_REC_AUDIO)->EnableWindow(TRUE);
}


ON_LOGGED_OUT(CRightRec);

void CRightRec::OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_UPDOWN* p = (NM_UPDOWN*)pNMHDR;
	p->iDelta = -p->iDelta;

	if( p->iPos + p->iDelta < FR_MIN ||
		p->iPos + p->iDelta > FR_MAX )
		*pResult = 1;
	else
		*pResult = 0;

	UpdateData();
}

⌨️ 快捷键说明

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