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

📄 netctlmregiondlg.cpp

📁 TM8000硬盘录像机客户端编程文档和Demo源代码
💻 CPP
字号:
// NetCtlMRegionDlg.cpp : implementation file
//

#include "stdafx.h"
#include "sample.h"
#include "NetCtlMRegionDlg.h"
#include "NetRemoteCtrlDlg.h"

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

extern USER_DVR_PARAMETER     *Con_pDVRPara; 
extern LoginParam             m_LoginParam; 
extern CNetRemoteCtrlDlg	  *pNetRemoteCtlDlg;
MotionRegion m_MotionRegion;

extern BOOL ENGLISH;
/////////////////////////////////////////////////////////////////////////////
// CNetCtlMRegionDlg dialog


CNetCtlMRegionDlg::CNetCtlMRegionDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CNetCtlMRegionDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CNetCtlMRegionDlg)
	m_AllPort = FALSE;
	//}}AFX_DATA_INIT
}


void CNetCtlMRegionDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CNetCtlMRegionDlg)
	DDX_Control(pDX, IDC_PORT_COMBO, m_PortCombo);
	DDX_Check(pDX, IDC_ALLPORT_CHECK, m_AllPort);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CNetCtlMRegionDlg, CDialog)
	//{{AFX_MSG_MAP(CNetCtlMRegionDlg)
	ON_BN_CLICKED(IDC_SET_BUTTON, OnSetButton)
	ON_CBN_SELCHANGE(IDC_PORT_COMBO, OnSelchangePortCombo)
	ON_BN_CLICKED(IDC_BTN_SELALL, OnBtnSelall)
	ON_BN_CLICKED(IDC_BTN_DISSELALL, OnBtnDisselall)
	//}}AFX_MSG_MAP
	ON_CONTROL_RANGE(BN_CLICKED,IDC_BUTTONMOTION1,IDC_BUTTONMOTION1+395,OnButtonmotion)
END_MESSAGE_MAP()

int nColCount;
/////////////////////////////////////////////////////////////////////////////
// CNetCtlMRegionDlg message handlers
BOOL CNetCtlMRegionDlg::OnInitDialog() 
{
	char * l_Port;//=_T("Camera");
	char * l_AllPort;//=_T("All camera");
	char * l_Set;//=_T("Setup");
	char * l_SelAll;
	char * l_DisSelAll;
	if(ENGLISH)
	{
		l_Port=_T("Channel");
		l_AllPort=_T("All channel");
		l_Set=_T("Setup");
		l_SelAll=_T("Select all");
		l_DisSelAll=_T("Clear all");
	}
	else
	{
		l_AllPort=_T("所有通道");
		l_Port=_T("通道");
		l_Set=_T("设置");
		l_SelAll=_T("全部选定");
		l_DisSelAll=_T("全部清除");
	}
	CDialog::OnInitDialog();
	
	CString   str ;
	int i;
	int x,y;
	RECT Rect;
/*	m_PortCombo.ResetContent() ;
/////
	if (pNetRemoteCtlDlg->m_nDVRType <= 0) 
	{
		for (i=0;i<Con_pDVRPara->nPortNo ;i++)
		{
			str.Format("%s%02d",l_Port,i+1) ;
			m_PortCombo.AddString(str) ;
		}
	}
	else
	{
		for (i=0;i<m_LoginParam.ChannelCount ;i++)
		{
			str.Format("%s%02d",l_Port,i+1) ;
			m_PortCombo.AddString(str) ;
		}
	}
*/
	if(m_PortCombo.GetCount()>0)
		m_PortCombo.SetCurSel(0);

	CWnd           *pWnd ;
	pWnd = GetDlgItem(IDC_ALLPORT_CHECK) ;
	pWnd->SetWindowText(l_AllPort);

	pWnd = GetDlgItem(IDC_SET_BUTTON) ;
	pWnd->SetWindowText(l_Set);

	pWnd=GetDlgItem(IDC_BTN_SELALL);
	pWnd->SetWindowText(l_SelAll);

	pWnd=GetDlgItem(IDC_BTN_DISSELALL);
	pWnd->SetWindowText(l_DisSelAll);

	UpdateData(FALSE) ;

    h_MIcon=AfxGetApp()->LoadIcon(IDI_MOTION);
    h_MaskIcon=AfxGetApp()->LoadIcon(IDI_MASK);

	nLastCheck=-1;


    for(i=0;i<396;i++)
	{
		Motion[i]=new CButton();
		x=i%22;
		y=i/22;
		Rect.left=106+x*16;
		Rect.top=38+y*16;
		Rect.right=Rect.left+16;
		Rect.bottom=Rect.top+16;
		Motion[i]->Create("",BS_PUSHBUTTON|BS_ICON,Rect,this,IDC_BUTTONMOTION1+i);
		Motion[i]->ShowWindow(SW_SHOW);
	}
	return TRUE;  // return TRUE unless you set the focus to a control
	// EXCEPTION: OCX Property Pages should return FALSE
}

BOOL CNetCtlMRegionDlg::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	DWORD t1=0;
	DWORD t2=0;
	
    t1=pMsg->message;
	t2=pMsg->wParam;
	if(t1==WM_KEYDOWN&&(t2==VK_RETURN||t2==VK_ESCAPE))
		return true;
	return CDialog::PreTranslateMessage(pMsg);
}

void CNetCtlMRegionDlg::Refresh()
{
	char * l_Port;//=_T("Camera");
	if(ENGLISH)
		l_Port=_T("Channel");
	else
		l_Port=_T("通道");
	int i;
	RECT Rect;
	int x,y;
	BYTE bStandard = pNetRemoteCtlDlg->m_nDVRType <= 0?Con_pDVRPara->nStandard:m_LoginParam.nStandard;
	
	nColCount=22;
	for(i=0;i<396;i++)
	{
		x=i%nColCount;
		y=i/nColCount;
		Rect.left=106+x*16;
		Rect.top=38+y*16;
		Rect.right=Rect.left+16;
		Rect.bottom=Rect.top+16;
		Motion[i]->MoveWindow(&Rect);
		Motion[i]->ShowWindow(SW_SHOW);
	}
	if(bStandard!=0)
	{//N 制
		for(i=330;i<396;i++)
			Motion[i]->ShowWindow(SW_HIDE);	
	}		
	
	m_PortCombo.ResetContent() ;
	/////
	if (pNetRemoteCtlDlg->m_nDVRType <= 0) 
	{
		for (i=0;i<Con_pDVRPara->nPortNo ;i++)
		{
			CString   str ;
			str.Format("%s%02d",l_Port,i+1) ;
			m_PortCombo.AddString(str) ;
		}
		if(m_PortCombo.GetCount()>0)
			m_PortCombo.SetCurSel(0);
		OnSelchangePortCombo();
	}
	else
	{
		for (i=0;i<m_LoginParam.ChannelCount;i++)
		{
			CString   str ;
			str.Format("%s%02d",l_Port,i+1) ;
			m_PortCombo.AddString(str) ;
		}
		if(m_PortCombo.GetCount()>0)
			m_PortCombo.SetCurSel(0);
		OnSelchangePortCombo();
	}
}

void CNetCtlMRegionDlg::PortSelChangePro()
{
	int i,j;
	nLastCheck=-1;
	for(short No=0;No<396;No++)
	{
		i=No/8;
		j=No%8;
		if(MotionCheck[i]&(1<<j))
			Motion[No]->SetIcon(h_MIcon);
		else if(MaskCheck[i]&(1<<j))
			Motion[No]->SetIcon(h_MaskIcon);
		else
			Motion[No]->SetIcon(NULL);
	}	
}

void CNetCtlMRegionDlg::OnSetButton() 
{
	char * l_SelectPort;
	if(ENGLISH)
	{
		l_SelectPort=_T("Please select a channel to set motion region");
	}
	else
	{
		l_SelectPort=_T("请选择设置移动区域的通道!");
	}
	// TODO: Add your control notification handler code here
	unsigned char  nPort;
	UpdateData(TRUE);
	if (m_AllPort) 
	{
		nPort = 0 ;
	}
	else 
	{
		int    i ;
		i = m_PortCombo.GetCurSel() ;
		if (i < 0)
		{
			AfxMessageBox(l_SelectPort,IDOK,NULL);
			return ;
		}
		nPort = i+1 ;
	}
	
	pNetRemoteCtlDlg->SetNetRemoteMAlarmRegionSet(nPort,MotionCheck,0,MaskCheck,1); //6.01

	if (pNetRemoteCtlDlg->m_nDVRType <= 0) 
	{				
		if(nPort!=0)
		{
			memcpy(Con_pDVRPara->PortConfigEx[nPort-1].nMotionCheck,MotionCheck,52);
			memcpy(Con_pDVRPara->PortConfigEx[nPort-1].nImageMask,MaskCheck,52);
		}//if(nPort!=0xea)
		else
		{
			for(short k=0;k<Con_pDVRPara->nPortNo;k++)
			{
				memcpy(Con_pDVRPara->PortConfigEx[k].nMotionCheck,MotionCheck,52);
				memcpy(Con_pDVRPara->PortConfigEx[k].nImageMask,MaskCheck,52);
			}
		}  
		
	}
}

void CNetCtlMRegionDlg::OnSelchangePortCombo() 
{
	// TODO: Add your control notification handler code here
	nLastCheck=-1;
	if (pNetRemoteCtlDlg->m_nDVRType <= 0) 
	{
		BYTE portno;
		UpdateData(TRUE);
        portno=m_PortCombo.GetCurSel();
		if(portno!=-1)
		{				
			memcpy(MotionCheck,Con_pDVRPara->PortConfigEx[portno].nMotionCheck,52);
			memcpy(MaskCheck,Con_pDVRPara->PortConfigEx[portno].nImageMask,52);
			
			PortSelChangePro();
		}
	}
	else
	{
		int portno;	
		portno=m_PortCombo.GetCurSel();
		pNetRemoteCtlDlg->GetDvrParam(portno+1,0,PARA_TYPE_ALARM_MOVE_CHECK_REGION,&m_MotionRegion,sizeof(MotionRegion));

		UpdateData(TRUE);
		if(portno != -1)
		{
			memcpy(MotionCheck,m_MotionRegion.MotionCheck,52);
			memcpy(MaskCheck,m_MotionRegion.ImageMask,52);		
			PortSelChangePro();
		}
	}
}

void CNetCtlMRegionDlg::GetState(int nLastCheck,int No) //获取状态 nLastState为上一次按钮状态,AllState为其它所有的按钮状态0,1,2,-1(不全相同)
{
	BYTE i=0,j=0;
	int k;
	int X,Y;
	int StartX,EndX,StartY,EndY;
	int nLastState;
	i=nLastCheck/8;
	j=nLastCheck%8;
	if(MotionCheck[i]&(1<<j))
		nLastState=1;
	else if(MaskCheck[i]&(1<<j))
		nLastState=2;
	else
		nLastState=0;

	StartY=nLastCheck/nColCount;
	StartX=nLastCheck%nColCount;

	EndY=No/nColCount;
	EndX=No%nColCount;

	for(X=min(StartX,EndX);X<=max(StartX,EndX);X++)
	{
		for(Y=min(StartY,EndY);Y<=max(StartY,EndY);Y++)
		{
			k=Y*nColCount+X;
			i=k/8;
			j=k%8;
			if(nLastState==0)
			{
				MotionCheck[i]=MotionCheck[i]&(~(1<<j));
				MaskCheck[i]=MaskCheck[i]&(~(1<<j));
				Motion[k]->SetIcon(NULL);
			}
			else if(nLastState==1)
			{
				MotionCheck[i]=MotionCheck[i]|(1<<j);
				MaskCheck[i]=MaskCheck[i]&(~(1<<j));
				Motion[k]->SetIcon(h_MIcon);
			}
			else
			{
				MotionCheck[i]=MotionCheck[i]&(~(1<<j));
				MaskCheck[i]=MaskCheck[i]|(1<<j);
				Motion[k]->SetIcon(h_MaskIcon);
			}
		}
	}
}

void CNetCtlMRegionDlg::MotionCheckChange(int No)
{

    BYTE i=0,j=0;
	i=No/8;
	j=No%8;
	if(MotionCheck[i]&(1<<j))
	{
		Motion[No]->SetIcon(h_MaskIcon);
		MotionCheck[i]=MotionCheck[i]&(~(1<<j));
		MaskCheck[i]=MaskCheck[i]|(1<<j);
	}
	else if(MaskCheck[i]&(1<<j))
	{
		Motion[No]->SetIcon(NULL);
		MaskCheck[i]=MaskCheck[i]&(~(1<<j));
	}	
	else
	{
		Motion[No]->SetIcon(h_MIcon);
		MotionCheck[i]=MotionCheck[i]|(1<<j);
	}
	if(nLastCheck==-1||GetKeyState(VK_CONTROL)>=0)
	{
		nLastCheck=No;
	}
	else
	{
		GetState(nLastCheck,No);
	}
}

void CNetCtlMRegionDlg::OnButtonmotion(UINT nID) 
{
	// TODO: Add your control notification handler code here
    MotionCheckChange((nID-IDC_BUTTONMOTION1));
}

void CNetCtlMRegionDlg::OnBtnSelall() 
{
	// TODO: Add your control notification handler code here
	memset(MotionCheck,0xff,52);
	memset(MaskCheck,0x00,52);
	PortSelChangePro();	
}

void CNetCtlMRegionDlg::OnBtnDisselall() 
{
	// TODO: Add your control notification handler code here
	memset(MotionCheck,0x00,52);
	memset(MaskCheck,0x00,52);
	PortSelChangePro();	
}

⌨️ 快捷键说明

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