dlgconnect.cpp

来自「MPEG4网络视频服务器客户端图象监控软件」· C++ 代码 · 共 495 行

CPP
495
字号
// DlgConnect.cpp : implementation file
//
#include "stdafx.h"
#include "DvsUser.h"
#include "DlgConnect.h"

#include "DvsUserDlg.h"
#include "DlgViewConnect.h"

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

extern CDvsUserDlg*	g_User;
/////////////////////////////////////////////////////////////////////////////
// CDlgConnect dialog
//------------------------------------------------------------------------
//
//
//
//------------------------------------------------------------------------
CDlgConnect::CDlgConnect(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgConnect::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgConnect)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	hMonitor = AfxGetApp()->LoadIcon(IDI_ICON_MON);
	hCard	 = AfxGetApp()->LoadIcon(IDI_ICON_CARD);
	hBrance	 = AfxGetApp()->LoadIcon(IDI_ICON_BRANCE);

	nCurrentCard	= 0;
	nCurrentView	= 0;
}
//------------------------------------------------------------------------
//
//
//
//------------------------------------------------------------------------
CDlgConnect::~CDlgConnect()
{
}
//------------------------------------------------------------------------
//
//
//
//------------------------------------------------------------------------
void CDlgConnect::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgConnect)
	DDX_Control(pDX, IDC_STARTVIDEO_MONITOR, m_monitor_combo);
	DDX_Control(pDX, IDC_STARTVIDEO_CARD, m_card_combo);
	DDX_Control(pDX, IDC_STARTVIDEO_LIST, m_video_list);
	//}}AFX_DATA_MAP
}
//------------------------------------------------------------------------
//
//
//
//------------------------------------------------------------------------
BEGIN_MESSAGE_MAP(CDlgConnect, CDialog)
	//{{AFX_MSG_MAP(CDlgConnect)
	ON_BN_CLICKED(IDC_STARTVIDEO_VIEW, OnStartvideoView)
	ON_CBN_SELCHANGE(IDC_STARTVIDEO_MONITOR, OnSelchangeStartvideoMonitor)
	ON_CBN_SELCHANGE(IDC_STARTVIDEO_CARD, OnSelchangeStartvideoCard)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgConnect message handlers
//------------------------------------------------------------------------
//
//
//
//------------------------------------------------------------------------
BOOL CDlgConnect::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	InitControl();
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}
//------------------------------------------------------------------------
//
//
//
//------------------------------------------------------------------------
VOID CDlgConnect::InitControl()
{
  COMBOBOXEXITEM	item;
  char	szTemp[100];

	imageMonitor.Create(16, 16, ILC_COLOR8, 1, 1);
	imageMonitor.Add(hMonitor);

	imageCard.Create(16, 16, ILC_COLOR8, 1, 1);
	imageCard.Add(hCard);

	imageBrance.Create(16, 16, ILC_COLOR8, 1, 1);
	imageBrance.Add(hBrance);

	m_monitor_combo.SetImageList(&imageMonitor);
	m_card_combo.SetImageList(&imageCard);
	m_video_list.SetImageList(&imageBrance, LVSIL_SMALL);
	
	for(int i=0; i<4; i++)
	{
		sprintf(szTemp, "第%d监控窗口", i+1);
		item.mask			= CBEIF_IMAGE|CBEIF_SELECTEDIMAGE|CBEIF_TEXT|CBEIF_LPARAM;
		item.iItem			= i;
		item.iImage			= 0;
		item.iSelectedImage	= 0;
		item.lParam			= NULL;
		item.pszText		= szTemp;
		m_monitor_combo.InsertItem(&item);
	}
	m_monitor_combo.SetCurSel(0);

	for(i=0; i<32; i++)
	{
		if(g_User->CARD[i].dwCardState != 0)	//编码卡设置后全部显示
		{
//			sprintf(szTemp, "第%d块编码卡", i+1);
			sprintf(szTemp, "%s", g_User->CARD[i].szCardName);
			item.mask			= CBEIF_IMAGE|CBEIF_SELECTEDIMAGE|CBEIF_TEXT|CBEIF_LPARAM;
			item.iItem			= i;
			item.iImage			= 0;
			item.iSelectedImage	= 0;
			item.lParam			= NULL;
			item.pszText		= szTemp;
			m_card_combo.InsertItem(&item);
		}
	}
//	m_card_combo.SetCurSel(0);

	m_video_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_ONECLICKACTIVATE );
	m_video_list.InsertColumn(0, _TEXT("摄象机名称"), LVCFMT_LEFT, 140);
	m_video_list.InsertColumn(1, _TEXT("云台"), 0, 38);
	m_video_list.InsertColumn(2, _TEXT("灯源"), 0, 38);
	m_video_list.InsertColumn(3, _TEXT("状态"));
	m_video_list.SetColumnWidth(3, LVSCW_AUTOSIZE_USEHEADER);	
}
//------------------------------------------------------------------------
//
//
//
//------------------------------------------------------------------------
void CDlgConnect::OnStartvideoView() 
{
	pDlgView = new CDlgViewConnect();
	pDlgView->DoModal();
	delete pDlgView;
	pDlgView = NULL;	

	OnSelchangeStartvideoCard();
}
//------------------------------------------------------------------------
//
//
//
//------------------------------------------------------------------------
void CDlgConnect::OnSelchangeStartvideoMonitor() 
{
	int nSel = m_monitor_combo.GetCurSel();

	nCurrentView = nSel;
	if(nSel !=CB_ERR)
	{
		if(g_User->LINK[nSel].bLinkState)			//如果已经连接上,不允许再连接
		{
			GetDlgItem(IDOK)->EnableWindow(FALSE);
		}
		else{
			for(int i=0; i<4; i++)
			{
				if(g_User->LINK[i].bLinkState == 1)	// 1: 已经连接上 0: 未连接
				{
					if(g_User->LINK[i].dwCard == (DWORD)nCurrentCard)
					{
						GetDlgItem(IDOK)->EnableWindow(FALSE);
						return;
					}
				}
			}
			GetDlgItem(IDOK)->EnableWindow(TRUE);
		}
	}	
}
//------------------------------------------------------------------------
//
//
//
//------------------------------------------------------------------------
void CDlgConnect::OnSelchangeStartvideoCard() 
{
	int nSel = m_card_combo.GetCurSel();
	if(nSel !=CB_ERR)
	{
		nCurrentCard = nSel;
		SetList(nSel);

		int nVideo = m_monitor_combo.GetCurSel();
		if(nVideo != CB_ERR)
		{
			if(g_User->LINK[nVideo].bLinkState)			//如果已经连接上,不允许再连接
			{
				GetDlgItem(IDOK)->EnableWindow(FALSE);
			}
			else{
				for(int i=0; i<4; i++)
				{
					if(g_User->LINK[i].bLinkState == 1)	// 1: 已经连接上 0: 未连接
					{
						if(g_User->LINK[i].dwCard == (DWORD)nCurrentCard)
						{
							GetDlgItem(IDOK)->EnableWindow(FALSE);
							return;
						}
					}
				}
				GetDlgItem(IDOK)->EnableWindow(TRUE);
			}
		}
	}	
}
//------------------------------------------------------------------------
//
//
//
//------------------------------------------------------------------------
VOID CDlgConnect::SetList(int iCard)
{
	m_video_list.DeleteAllItems();
	for(int i=0; i<8; i++)
	{
		m_video_list.InsertItem(i, g_User->CARD[iCard].Brance[i].szBranceName, 0);

		if(g_User->CARD[iCard].Brance[i].bDevice)
			m_video_list.SetItemText(i, 1, _TEXT("√"));
		else
			m_video_list.SetItemText(i, 1, _TEXT(""));

		if(g_User->CARD[iCard].Brance[i].bLamp)
			m_video_list.SetItemText(i, 2, _TEXT("√"));
		else
			m_video_list.SetItemText(i, 2, _TEXT(""));
///////////////////////////////////////////////////////////////////////////////////
		if(g_User->CARD[iCard].dwCardState == CARD_READY)
		{
			m_video_list.SetItemText(i, 3, _TEXT("准备连接"));
		}
///////////////////////////////////////////////////////////////////////////////////
		else if(g_User->CARD[iCard].dwCardState == CARD_INIT)
		{
			m_video_list.SetItemText(i, 3, _TEXT("编码器未连接?"));
		}
///////////////////////////////////////////////////////////////////////////////////
		else if(g_User->CARD[iCard].dwCardState == CARD_START)
		{
			if(g_User->CARD[iCard].dwActiveBrance == (UINT)i)
			{
				m_video_list.SetItemText(i, 3, _TEXT("监控中"));
			}
			else{
				m_video_list.SetItemText(i, 3, _TEXT("编码器忙"));
			}
		}
///////////////////////////////////////////////////////////////////////////////////
		else if(g_User->CARD[iCard].dwCardState == CARD_ALERT)
		{
			if(g_User->CARD[iCard].dwActiveBrance == (UINT)i)
			{
				m_video_list.SetItemText(i, 3, _TEXT("报警中"));
			}
			else{
				m_video_list.SetItemText(i, 3, _TEXT("编码器忙"));
			}
		}
/////////////////////////////////////////////////////////////////////////////////////
		else if(g_User->CARD[iCard].dwCardState == CARD_RECYCLE)
		{
			if(g_User->CARD[iCard].dwActiveBrance == (UINT)i)
			{
				m_video_list.SetItemText(i, 3, _TEXT("循环显示中"));
			}
			else{
				m_video_list.SetItemText(i, 3, _TEXT("编码器忙"));
			}
		}
/////////////////////////////////////////////////////////////////////////////////////
		else{
			m_video_list.SetItemText(i, 3, _TEXT("编码器故障"));	
		}
	}	
}
//------------------------------------------------------------------------
//
//
//
//------------------------------------------------------------------------
VOID CDlgConnect::RefreshList(int iBrance)
{
	m_video_list.DeleteAllItems();
	g_User->CARD[nCurrentCard].dwCardState		= CARD_START;
	g_User->CARD[nCurrentCard].dwActiveBrance	= iBrance;
	g_User->CARD[nCurrentCard].dwUserPriority	= g_User->CLIENT.dwUserPriority;

	for(int i=0; i<8; i++)
	{
		m_video_list.InsertItem(i, g_User->CARD[nCurrentCard].Brance[i].szBranceName, 0);

		if(g_User->CARD[nCurrentCard].Brance[i].bDevice)
			m_video_list.SetItemText(i, 1, _TEXT("√"));
		else
			m_video_list.SetItemText(i, 1, _TEXT(""));

		if(g_User->CARD[nCurrentCard].Brance[i].bLamp)
			m_video_list.SetItemText(i, 2, _TEXT("√"));
		else
			m_video_list.SetItemText(i, 2, _TEXT(""));

		if(g_User->CARD[nCurrentCard].dwActiveBrance == (UINT)i)
		{
			m_video_list.SetItemText(i, 3, _TEXT("监控中"));
		}
		else{
			m_video_list.SetItemText(i, 3, _TEXT("编码卡忙"));
		}
	}		
}
//------------------------------------------------------------------------
//
//
//
//------------------------------------------------------------------------
void CDlgConnect::OnOK() 
{
	int nSel = m_video_list.GetNextItem(-1,  LVNI_SELECTED);
	if(nSel != -1)
	{
		if(g_User->CARD[nCurrentCard].dwCardState == CARD_READY)		//没有使用此卡
		{
			OnStartReady(nSel);
			return ;
		}
		else if(g_User->CARD[nCurrentCard].dwCardState == CARD_ERROR)	//无法使用此卡
		{
			OnStartError(nSel);
			return;
		}
		else if(g_User->CARD[nCurrentCard].dwCardState == CARD_START)
		{
			OnStartStart(nSel);
			return ;
		}
		else if(g_User->CARD[nCurrentCard].dwCardState == CARD_ALERT)
		{
			OnStartAlert(nSel);
			return;
		}
		else if(g_User->CARD[nCurrentCard].dwCardState == CARD_INIT)
		{
			OnStartInit(nSel);
			return;
		}

		else if(g_User->CARD[nCurrentCard].dwCardState == CARD_RECYCLE)
		{
			OnStartRecycle(nSel);
			return;
		}

		else
			return;
	}
	return ;
}
//------------------------------------------------------------------------
//
//
//
//------------------------------------------------------------------------
INT CDlgConnect::OnStartInit(int nSelect)
{
	::MessageBox(this->m_hWnd, _TEXT("服务器未与编码器建立连接,请检查服务器的连接状态!\n(RETURN errno = CARD_INIT)"), _TEXT("提示"), 
					0|MB_ICONINFORMATION);
	return 1;
}
//------------------------------------------------------------------------
//
//
//
//------------------------------------------------------------------------
INT CDlgConnect::OnStartReady(int nSelect)
{
	RefreshList(nSelect);
	g_User->SetViewWindow(nCurrentView, nCurrentCard, nSelect);
	g_User->AddLinkInfo(nCurrentView, nCurrentCard, nSelect);
	GetDlgItem(IDOK)->EnableWindow(FALSE);			
	g_User->OnSendVideoStart(nCurrentCard, nSelect);
	//MODIFY//

	return 1;
}
//------------------------------------------------------------------------
//
//
//
//------------------------------------------------------------------------
INT CDlgConnect::OnStartStart(int nSelect)
{
	if(g_User->CARD[nCurrentCard].dwActiveBrance == (UINT)nSelect)	//使用中,监控同一路
	{
		g_User->SetViewWindow(nCurrentView, nCurrentCard, nSelect);
		g_User->AddLinkInfo(nCurrentView, nCurrentCard, nSelect);
		GetDlgItem(IDOK)->EnableWindow(FALSE);
		g_User->OnSendVideoStart(nCurrentCard, nSelect);
	}
	
	else{//	g_User->CARD[nCurrentCard].dwActiveBrance != (UINT)nSelect//使用中,监控不是同一路
		if(IDOK ==::MessageBox(this->m_hWnd, _TEXT("您所要监控的摄象机需要和别人协调?"), _TEXT("提示"), MB_OKCANCEL|MB_ICONQUESTION))
		{
			g_User->SetViewWindow(nCurrentView, nCurrentCard, g_User->CARD[nCurrentCard].dwActiveBrance);
			g_User->AddLinkInfo(nCurrentView, nCurrentCard, g_User->CARD[nCurrentCard].dwActiveBrance);
			GetDlgItem(IDOK)->EnableWindow(FALSE);
			g_User->OnSendVideoStart(nCurrentCard, nSelect);
		}
	}
	return 1;
}
//------------------------------------------------------------------------
//
//
//
//------------------------------------------------------------------------
INT CDlgConnect::OnStartAlert(int nSelect)
{
	if(g_User->CARD[nCurrentCard].dwActiveBrance == (UINT)nSelect)	//使用中,监控同一路
	{
		g_User->SetViewWindow(nCurrentView, nCurrentCard, nSelect);
		g_User->AddLinkInfo(nCurrentView, nCurrentCard, nSelect);
		GetDlgItem(IDOK)->EnableWindow(FALSE);
		g_User->OnSendVideoStart(nCurrentCard, nSelect);
	}
	
	else{//	g_User->CARD[nCurrentCard].dwActiveBrance != (UINT)nSelect//使用中,监控不是同一路
		MessageBox(_TEXT("正在发生报警,不允许切换视频!"), _TEXT("系统提示"), MB_OKCANCEL|MB_ICONQUESTION);

	}
	return 1;
}
//------------------------------------------------------------------------
//
//
//
//------------------------------------------------------------------------
INT CDlgConnect::OnStartRecycle(int nSelect)
{
	::MessageBox(this->m_hWnd, _TEXT("循环显示时不允许被打断,请稍后再试!(*_^)"), _TEXT("提示"), 
					0|MB_ICONINFORMATION);
	return 1;
}
//------------------------------------------------------------------------
//
//
//
//------------------------------------------------------------------------
INT CDlgConnect::OnStartError(int nSelect)
{
	::MessageBox(this->m_hWnd, _TEXT("编码器发生故障,请检查编码器掉电以及线路故障!\n(RETURN errno = CARD_ERROR)"), _TEXT("错误"), 
					0|MB_ICONINFORMATION);
	return 1;
}
//------------------------------------------------------------------------
//
//
//
//------------------------------------------------------------------------
void CDlgConnect::OnCancel() 
{
	// TODO: Add extra cleanup here
	
	CDialog::OnCancel();
}
//------------------------------------------------------------------------
//
//
//
//------------------------------------------------------------------------

⌨️ 快捷键说明

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