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 + -
显示快捷键?