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

📄 rightchannel.cpp

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

#include "stdafx.h"
#include "..\dvrmanager.h"
#include "net.h"
#include "RightChannel.h"
#include "../utils/common.h"
#include "../video/video_channel.h"
#include "../utils/custom_msgs.h"

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

/////////////////////////////////////////////////////////////////////////////
// CRightChannel dialog


//##ModelId=3F90BAB40056
CRightChannel::CRightChannel(CWnd* pParent /*=NULL*/)
	: baseclass(CRightChannel::IDD, pParent), mask(&m_grid), last_channel(-1),pkk(&m_grid)
{
	//{{AFX_DATA_INIT(CRightChannel)
	m_channel = -1;
	m_motor = -1;
	m_which = -1;
	m_channel_title = _T("");
	m_motor_addr = NULL;
	m_video_lost_alert = 0;
	m_baudrate = 0;
	m_maskall = 0 ;
	//}}AFX_DATA_INIT

	ZeroMemory(&opt, sizeof(opt));
	ZeroMemory(&opt1, sizeof(opt1));
	memset(&opt.image_mask, 0xff, 8);
}

//##ModelId=3F90BAB401E5
void CRightChannel::DoDataExchange(CDataExchange* pDX)
{
	baseclass::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CRightChannel)
	DDX_Control(pDX, ID_9, m_9);
	DDX_Control(pDX, ID_S, m_s);
	DDX_Control(pDX, IDC_RADIO1, m_rd2);
	DDX_Control(pDX, IDRD_VIDEO_LOST_ALERT, m_rd1);
	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_TITLE, m_title);
	DDX_Control(pDX, ID_FLOWER, m_grid);
	DDX_Control(pDX, ID_6, m_6);
	DDX_Control(pDX, ID_2, m_2);
	DDX_Control(pDX, ID_7, m_7);
	DDX_Control(pDX, ID_5, m_5);
	DDX_Control(pDX, ID_4, m_4);
	DDX_Control(pDX, ID_3, m_3);
	DDX_Control(pDX, ID_1, m_1);
	DDX_Control(pDX, IDC_D12, m_12);
	DDX_CBIndex(pDX, IDCB_CHANNEL, m_channel);
	DDX_CBIndex(pDX, IDCB_MOTOR, m_motor);
	DDX_CBIndex(pDX, IDCB_WHICH, m_which);
	DDX_Text(pDX, IDED_CHNL_TITLE, m_channel_title);
	DDX_Text(pDX, IDED_MOTOR_ADDR, m_motor_addr);
	DDV_MinMaxInt(pDX, m_motor_addr, 0, 255);
	DDX_Radio(pDX, IDRD_VIDEO_LOST_ALERT, m_video_lost_alert);
	DDX_CBIndex(pDX, IDCB_BAUDRATE, m_baudrate);
	DDX_Control(pDX, IDCB_MASKALL, m_ck_maskall);
	DDX_Check(pDX, IDCB_MASKALL, m_maskall);
	//}}AFX_DATA_MAP

//	if( !pDX->m_bSaveAndValidate )
//	{
//		m_grid.update();
//	}

	/*
	 *	当允许/禁止MD时, 更新控件状态
	 */
/*
	static UINT ids[] = 
	{
		ID_FLOWER, //IDCB_REC_DAY,
//		IDED_CHNL_TITLE
	};
	for( int i=0; i<SIZE_OF(ids); i++ )
	{
		GetDlgItem(ids[i])->EnableWindow(m_video_lost_alert);
	}
*/
}


BEGIN_MESSAGE_MAP(CRightChannel, baseclass)
	//{{AFX_MSG_MAP(CRightChannel)
	ON_CBN_SELCHANGE(IDCB_WHICH, OnSelchangeWhich)
	ON_BN_CLICKED(IDBTN_REFRESH, OnRefresh)
	ON_CBN_SELCHANGE(IDCB_CHANNEL, OnSelchangeChannel)
	ON_BN_CLICKED(IDBTN_SET, OnSet)
	ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
	ON_BN_CLICKED(IDRD_VIDEO_LOST_ALERT, OnVideoLostAlert)
	ON_NOTIFY(UDN_DELTAPOS, ID_SPIN, OnDeltaposSpin)
	//}}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()

/////////////////////////////////////////////////////////////////////////////
// CRightChannel message handlers

//##ModelId=3F90BAB40217
BOOL CRightChannel::OnInitDialog() 
{
	baseclass::OnInitDialog();
	
	init_label(m_1).SetFontBold(TRUE);
	init_label(m_3);
	init_label(m_4);
	init_label(m_5);
	init_label(m_7);
	init_label(m_6);
	init_label(m_9);
	
	init_title(m_title);
	m_grid.init();
	m_grid.set_grid(8,8);
	m_grid.update();
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

//##ModelId=3F90BAB401F9
LRESULT CRightChannel::on_update_data(WPARAM w, LPARAM)
{
	if( w == FALSE )
	{
		charbuf str(opt.channel_name_length+1);
		strncpy(str, (char*)opt.channel_name, opt.channel_name_length);
		str.data()[opt.channel_name_length] = 0;

		m_channel = opt.channel;
		m_channel_title = str;
		//memcpy(mask->mask_data(), opt.image_mask, 8);
		mask->set_data(opt.image_mask);
		mask->update();
		m_motor = opt.camera_type;
		m_video_lost_alert = opt.alarm;

	//	m_baudrate = opt1.baudrate;
	//	m_maskall  = opt1.maskall ;
	}
	UpdateData(w) ;
	return 0 ;
}

//void CRightChannel::on_get_ok(DWORD ip, USHORT port, NET_OPTIONS no, void* stuff)
MSG3(on_get_ok, CRightChannel)
{
	NET_OPTIONS no = (NET_OPTIONS)w;
	if( no == OPT_TITLE )
	{
		TREC_CHANNELTITLE* stuff = (TREC_CHANNELTITLE*)l;
		if (stuff->channel != last_channel)
			return 0 ;
		memcpy(&opt, stuff, sizeof(opt));
	}
	else	// OPT_BAUDRATE
	{
		TREC_BAUDRATE* stuff = (TREC_BAUDRATE*)l;
		m_baudrate = stuff->baudrate;
		m_maskall  = stuff->maskall ;
		m_motor_addr = stuff->address ;
		memcpy(&opt1, stuff, sizeof(opt1));
	}
	PostMessage(WM_UPDATE_DATA, FALSE);
	UpdateData(FALSE) ;
	info_balloon(IDS_CHNL_GET) ;
	return 0;
}

//void CRightChannel::on_set_ok(DWORD ip, USHORT port, NET_OPTIONS no)
MSG3(on_set_ok, CRightChannel)
{
	info_balloon(IDS_CHNL_SET);
	return 0;
}

//##ModelId=3F90BAB40005
void CRightChannel::on_join()
{
	m_cbwhich.ResetContent();
	fill_combo(&m_cbwhich);
	m_cbchannel.EnableWindow(FALSE);
	mask = &m_grid;
}

//##ModelId=3F90BAB4000F
void CRightChannel::on_leave()
{
	//m_cbchannel.ResetContent();
	mask->clear_grid();
}

//##ModelId=3F90BAB40037
CString CRightChannel::get_alias()
{
	CString alias;
	
	UpdateData();
	if( m_which == -1 )
		return CString();

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

//##ModelId=3F90BAB40221
void CRightChannel::OnSelchangeWhich() 
{
	GET_ALIAS;

	fill_combo_chnls(alias, &m_cbchannel);
	m_cbchannel.AddString("ALL");
	m_cbchannel.EnableWindow(!alias.IsEmpty());

	m_channel = 0;
	UpdateData(FALSE);
	OnSelchangeChannel();
}

//##ModelId=3F90BAB4022B
void CRightChannel::OnRefresh() 
{
	GET_ALIAS;
	last_channel = m_channel;

	get_net_opt(alias, OPT_TITLE, m_channel, m_hWnd) ;
	Sleep(10) ;
	get_net_opt(alias, OPT_BAUDRATE, m_channel, m_hWnd) ;
}

//##ModelId=3F90BAB40235
void CRightChannel::OnSelchangeChannel() 
{
	UpdateData(true);
	update_mask();
	OnRefresh();
}

//##ModelId=3F90BAB4023F
void CRightChannel::OnSet() 
{
	GET_ALIAS;

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

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

	if(check_sel_channel(ip, port, m_channel)) 
	{
		opt.channel =0xff;
		opt1.channel = 0xff;
	}
	else 
	{
		opt.channel = m_channel;
		opt1.channel = m_channel;
	}
	opt.alarm = m_video_lost_alert;
	opt.camera_type = m_motor;
	memcpy(opt.image_mask, mask->mask_data(), 8);
    
	int length = m_channel_title.GetLength();
	if(length > 16)
	{
		AfxMessageBox(ID_STATION_LENGTH_OVER);
		return;
	}
	memcpy((char*)opt.channel_name, m_channel_title, length);
	opt.channel_name_length = length;

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

	opt1.baudrate = m_baudrate;
	opt1.maskall  = m_maskall ;
	opt1.address  = m_motor_addr;
	
	set_net_opt(alias, OPT_BAUDRATE, &opt1, m_hWnd);
}

//##ModelId=3F90BAB40249
void CRightChannel::OnRadio1() 
{
	UpdateData();
//	update_mask();
}

//##ModelId=3F90BAB40254
void CRightChannel::OnVideoLostAlert() 
{
	UpdateData();
//	update_mask();
}

//##ModelId=3F90BAB40055
void CRightChannel::update_mask()
{
	GET_ALIAS;
	ULONG ip;
	USHORT port;
	get_addr(alias, ip, port);
	if(check_16_version(ip, port) || check_4004_version(ip, port) || check_4008_version(ip, port) || check_2000_version(ip, port) || check_2100_version(ip, port))
	{
		m_grid.EnableWindow(FALSE);
		return;
	}
	
	video_channel* vc = who_opened_it(alias, m_channel);
	if( vc )
	{
		if( mask != (video_mask*)vc )
		{
		
			mask->clear_grid();
		}
		m_grid.clear_grid();
		mask = vc;

		mask->set_data(opt.image_mask);
	}
	else
	{
		if( mask != (video_mask*)&m_grid )
		{
			mask->clear_grid();
			mask = &m_grid;
		}
	}

	mask->set_grid(8,8) ;
//	if( m_video_lost_alert )
//		mask->set_grid(8,8);
//	else
//		mask->clear_grid();
}

void CRightChannel::OnDeltaposSpin(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	if( pNMUpDown->iDelta < 0 )
	{
		if( m_motor_addr < 255 )
			m_motor_addr++;
		else
			m_motor_addr = 0;
	}
	else
	{
		if( m_motor_addr > 0 )
			m_motor_addr--;
		else
			m_motor_addr = 255;
	}
		
	UpdateData(FALSE);
			
	*pResult = 0;
}

ON_LOGGED_OUT(CRightChannel);

⌨️ 快捷键说明

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