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