📄 rightrec.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 + -