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

📄 talkdvrdlg.cpp

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

#include "stdafx.h"
#include "sample.h"
#include "TalkDVRDlg.h"
#include "ConSDK.h"

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

/////////////////////////////////////////////////////////////////////////////
// TalkDVRDlg dialog
extern BOOL ENGLISH;
unsigned long Cur_Talk_Ip=0;
CTalkDVRDlg::CTalkDVRDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTalkDVRDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CTalkDVRDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CTalkDVRDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTalkDVRDlg)
	DDX_Control(pDX, IDC_LIST_REQIP, m_cReqDVR);
	DDX_Control(pDX, IDC_IPADDRESS1, m_cTalkIp);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CTalkDVRDlg, CDialog)
	//{{AFX_MSG_MAP(CTalkDVRDlg)
	ON_BN_CLICKED(IDC_BTN_ACCEPT, OnBtnAccept)
	ON_BN_CLICKED(IDC_BTN_REJECT, OnBtnReject)
	ON_BN_CLICKED(IDC_BTN_STOP, OnBtnStop)
	ON_BN_CLICKED(IDC_BTN_PLAY, OnBtnPlay)
	ON_BN_CLICKED(IDC_BTN_TALK, OnBtnTalk)
	ON_NOTIFY(NM_CLICK, IDC_LIST_REQIP, OnClickListReqip)
	ON_NOTIFY(NM_DBLCLK, IDC_LIST_REQIP, OnDblclkListReqip)
	ON_BN_CLICKED(IDC_CHK_RECORD, OnChkRecord)
	ON_WM_CLOSE()
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTalkDVRDlg message handlers

BOOL CTalkDVRDlg::Create(CWnd* pParentWnd) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	return CDialog::Create(IDD, pParentWnd);
}

BOOL CTalkDVRDlg::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=(DWORD)pMsg->wParam;
	if(t1==WM_KEYDOWN&&(t2==VK_RETURN||t2==VK_ESCAPE))
       return true;
	
	return CDialog::PreTranslateMessage(pMsg);
}

BOOL CTalkDVRDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	char * l_ReqDVR;
	char * l_Accept;
	char * l_Reject;
	char * l_TalkManager;
	char * l_DVRName;
	char * l_NotConnect;
	char * l_StopTalk;
	char * l_AllDVR;
	char * l_StartTalk;
	char * l_Refresh;
	char * l_Ip;
	char * l_Name;
	char * l_ReqTime;
	char * l_State;
	char * l_Record;
	char * l_Talk;
	char * l_PlayBack;
	char * l_NetInitialFail;//=_T("Initial net failed!");
	if(ENGLISH)
	{
		l_ReqDVR=_T("DVRS Request Talk");
		l_Accept=_T("Accept");
		l_Reject=_T("Reject");
		l_TalkManager=_T("Talk Manager");
		l_DVRName=_T("DVR Name");
		l_NotConnect=_T("Not Connect...");
		l_StopTalk=_T("Stop");
		l_AllDVR=_T("All DVRS");
		l_StartTalk=_T("Start Talk");
		l_Refresh=_T("Refresh");
		l_Ip=_T("Ip Address");
		l_Name=_T("DVR Name");
		l_ReqTime=_T("Request Time");
		l_State=_T("State");
		l_Record=_T("Record");
		l_PlayBack=_T("Play back");
		l_Talk=_T("Talk back");
		l_NetInitialFail=_T("Initial net failed!");
	}
	else
	{
		l_ReqDVR=_T("请求对讲的DVR");
		l_Accept=_T("接受");
		l_Reject=_T("拒绝");
		l_TalkManager=_T("对讲管理");
		l_DVRName=_T("主机");
		l_NotConnect=_T("未连接...");
		l_StopTalk=_T("停止");
		l_AllDVR=_T("所有DVR");
		l_StartTalk=_T("开始讲话");
		l_Refresh=_T("刷新");
		l_Ip=_T("IP 地址");
		l_Name=_T("DVR名称");
		l_ReqTime=_T("请求时间");
		l_State=_T("状态");
		l_Record=_T("录音");
		l_PlayBack=_T("回放");
		l_Talk=_T("语音对讲");
		l_NetInitialFail=_T("网络初始化失败!");
	}
	LVCOLUMN lvcol;
	int i;
	// TODO: Add extra initialization here
		
	GetDlgItem(IDC_STATIC_REQIP)->SetWindowText(l_ReqDVR);
	GetDlgItem(IDC_BTN_ACCEPT)->SetWindowText(l_Accept);
	GetDlgItem(IDC_BTN_REJECT)->SetWindowText(l_Reject);
	GetDlgItem(IDC_STATIC_TALKMANAGER)->SetWindowText(l_TalkManager);
	GetDlgItem(IDC_STATIC_DVRNAME)->SetWindowText(l_DVRName);
	GetDlgItem(IDC_STATIC_STATE)->SetWindowText(l_NotConnect);
	GetDlgItem(IDC_BTN_STOP)->SetWindowText(l_StopTalk);
	GetDlgItem(IDC_STATIC_ALLDVR)->SetWindowText(l_AllDVR);
	GetDlgItem(IDC_BTN_TALK)->SetWindowText(l_StartTalk);
	GetDlgItem(IDC_CHK_RECORD)->SetWindowText(l_Record);
	GetDlgItem(IDC_BTN_PLAY)->SetWindowText(l_PlayBack);
	SetWindowText(l_Talk);

	m_cReqDVR.SetExtendedStyle(m_cReqDVR.GetExtendedStyle()|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

	lvcol.mask=LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT|LVCF_WIDTH;
	lvcol.fmt=LVCFMT_CENTER;//居中
	i=0;
	lvcol.cx=120;
	lvcol.pszText=l_Ip;
	lvcol.iSubItem=i;
	m_cReqDVR.InsertColumn(i++,&lvcol);

	lvcol.cx=120;
	lvcol.pszText=l_ReqTime;
	lvcol.iSubItem=i;
	m_cReqDVR.InsertColumn(i++,&lvcol);

	lvcol.cx=150;
	lvcol.pszText=l_State;
	lvcol.iSubItem=i;
	m_cReqDVR.InsertColumn(i++,&lvcol);
	
	m_cTalkIp.SetAddress(192,168,55,223);
	Con_InitTalk();

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CTalkDVRDlg::OnBtnAccept() 
{
	// TODO: Add your control notification handler code here
	char * l_Connecting;
	if(ENGLISH)
	{
		l_Connecting=_T("Connecting...");
	}
	else
	{
		l_Connecting=_T("正在连接...");
	}
	UINT SelCount;
	int nIndex;
	CString strIp;
	unsigned long uIp;
	SelCount = m_cReqDVR.GetSelectedCount();
	if(SelCount == 0)
		return ;
	nIndex = m_cReqDVR.GetNextItem(-1, LVNI_SELECTED);
	strIp=m_cReqDVR.GetItemText(nIndex,0);
	m_cReqDVR.SetItemText(nIndex,2,l_Connecting);
	uIp=inet_addr(strIp);
	Con_AcceptTalk(uIp);
	GetDlgItem(IDC_STATIC_STATE)->SetWindowText(l_Connecting);
	GetDlgItem(IDC_STATIC_CURTALKIP)->SetWindowText(strIp);
	Cur_Talk_Ip=uIp;
}

void CTalkDVRDlg::OnBtnReject() 
{
	// TODO: Add your control notification handler code here
	char * l_Rejected;
	if(ENGLISH)
	{
		l_Rejected=_T("Is rejected");
	}
	else
	{
		l_Rejected=_T("被拒绝");
	}
	UINT SelCount;
	int nIndex;
	CString strIp,strName;
	unsigned long uIp;
	SelCount = m_cReqDVR.GetSelectedCount();
	if(SelCount == 0)
		return ;
	nIndex = m_cReqDVR.GetNextItem(-1, LVNI_SELECTED);
	strIp=m_cReqDVR.GetItemText(nIndex,0);
	m_cReqDVR.SetItemText(nIndex,2,l_Rejected);
	uIp=inet_addr(strIp);
	Con_RejectTalk(uIp);
	RemoveReqIp(uIp);
}

void CTalkDVRDlg::OnBtnStop() 
{
	// TODO: Add your control notification handler code here
	char * l_NotConnect;
	if(ENGLISH)
	{
		l_NotConnect=_T("Not Connect...");
	}
	else
	{
		l_NotConnect=_T("未连接...");
	}
	Con_StopTalk();
	GetDlgItem(IDC_STATIC_STATE)->SetWindowText(l_NotConnect);
	GetDlgItem(IDC_STATIC_CURTALKIP)->SetWindowText("");
	GetDlgItem(IDC_BTN_PLAY)->EnableWindow(TRUE);
	RemoveReqIp(Cur_Talk_Ip);
	Cur_Talk_Ip=0;
}

void CTalkDVRDlg::OnBtnPlay() 
{
	// TODO: Add your control notification handler code here
	char * l_Title;
	if(ENGLISH)
	{
		l_Title=_T("Open a Record file");
	}
	else
	{
		l_Title=_T("打开一个声音录像文件");
	}
	OPENFILENAME ofn;
	int len;
	TCHAR sfile[MAX_PATH];
	CTime CurTime=CTime::GetCurrentTime();
	CString strFile;
	ZeroMemory(&ofn, sizeof(ofn));
	ZeroMemory(sfile, sizeof(TCHAR)*MAX_PATH);
	// Initialize OPENFILENAME structure.
	GetModuleFileName(0,sfile,MAX_PATH);
	len=strlen(sfile);
	while(len>0&&sfile[len-1]!='\\'&&sfile[len-1]!=':')
	{
		sfile[len-1]='\0';
		len--;
	}
	strFile.Format("TalkRec\\%04d_%02d_%02d\\*.*",CurTime.GetYear(),CurTime.GetMonth(),CurTime.GetDay());
	strcat(sfile,strFile);
	ofn.lStructSize = sizeof(ofn);
	ofn.hwndOwner = NULL; 
	ofn.lpstrFile = sfile; 
	ofn.nMaxFile = MAX_PATH;
	ofn.lpstrFilter = NULL;
	ofn.nFilterIndex = 1;
	ofn.lpstrTitle = l_Title;
	ofn.lpstrInitialDir = NULL;
	ofn.lpstrCustomFilter = NULL;
	ofn.nMaxCustFilter = 0;
	ofn.lpstrFileTitle = NULL;
	ofn.nMaxFileTitle = 0;
	ofn.nFileOffset = 0;
	ofn.nFileExtension = 0;
	ofn.lpstrDefExt = NULL;
	ofn.lCustData = 0;
	ofn.lpfnHook = 0;
	ofn.lpTemplateName = 0;
	ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
	if(GetOpenFileName(&ofn))
	{
		Con_PlayTalkRecord(ofn.lpstrFile);
	}
	
}

void CTalkDVRDlg::OnBtnTalk() 
{
	// TODO: Add your control notification handler code here
	char * l_Connecting;
	if(ENGLISH)
	{
		l_Connecting=_T("Connecting...");
	}
	else
	{
		l_Connecting=_T("正在连接...");
	}
	CString strIp;
	unsigned long uIp;
	IN_ADDR InAddr;
	m_cTalkIp.GetAddress(uIp);
	uIp=htonl(uIp);
	if(uIp==0)
		return;
	InAddr.s_addr=uIp;
	strIp=inet_ntoa(InAddr);
	Con_StartTalk(uIp);
	Cur_Talk_Ip=uIp;
	GetDlgItem(IDC_STATIC_STATE)->SetWindowText(l_Connecting);

	GetDlgItem(IDC_STATIC_CURTALKIP)->SetWindowText(strIp);
	GetDlgItem(IDC_BTN_PLAY)->EnableWindow(FALSE);
	
}

void CTalkDVRDlg::OnClickListReqip(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	if(m_cReqDVR.GetSelectedCount()==0)
	{
		if(m_cReqDVR.GetItemCount()>0)
			m_cReqDVR.SetItemState(m_cReqDVR.GetItemCount()-1,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
	}
	
	*pResult = 0;
}

void CTalkDVRDlg::OnDblclkListReqip(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	if(m_cReqDVR.GetSelectedCount()==0)
	{
		if(m_cReqDVR.GetItemCount()>0)
			m_cReqDVR.SetItemState(m_cReqDVR.GetItemCount()-1,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
	}
	OnBtnAccept();
	
	*pResult = 0;
}

void CTalkDVRDlg::AddIp(unsigned long nIpAddr)
{
	char * l_Waiting;
	if(ENGLISH)
	{
		l_Waiting=_T("Wait for Accept...");
	}
	else
	{
		l_Waiting=_T("正在等待...");
	}
	int i,Index;
	CString strIp,strName;
	IN_ADDR InAddr;
	BOOL bExists=FALSE;
	InAddr.s_addr=nIpAddr;
	strIp=inet_ntoa(InAddr);
	CTime CurTime=CTime::GetCurrentTime();
	for(i=0;i<m_cReqDVR.GetItemCount();i++)
	{
		if(m_cReqDVR.GetItemText(i,0)==strIp)
		{
			bExists=TRUE;
			break;
		}
	}
	if(!bExists)
	{
		Index=m_cReqDVR.GetItemCount();
		m_cReqDVR.InsertItem(Index,"");
		m_cReqDVR.SetItemText(Index,0,strIp);
		m_cReqDVR.SetItemText(Index,1,CurTime.Format("%H:%M:%S"));
		m_cReqDVR.SetItemText(Index,2,l_Waiting);
		m_cReqDVR.SetItemState(Index,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
	}
}

void CTalkDVRDlg::SetTalkState(unsigned long nIpAddr,int state)
{
	char * l_Ready;
	char * l_NotConnect;
	char * l_Talking;
	if(ENGLISH)
	{
		l_Ready=_T("Ready to talk");
		l_NotConnect=_T("Not Connect...");
		l_Talking=_T("Talking...");
	}
	else
	{
		l_Ready=_T("准备就绪,可以通话");
		l_NotConnect=_T("未连接...");
		l_Talking=_T("正在通话...");
	}
	int i;
	CString strIp,OldText;
	unsigned long uIp;

	for(i=0;i<m_cReqDVR.GetItemCount();i++)
	{
		strIp=m_cReqDVR.GetItemText(i,0);
		uIp=inet_addr(strIp);
		if(uIp==nIpAddr)
		{
			switch(state)
			{
			case 0:	//正在对讲
				if(m_cReqDVR.GetItemText(i,2)!=l_Talking)
					m_cReqDVR.SetItemText(i,2,l_Talking);
				break;
			case 5:	//已接受对讲
				if(m_cReqDVR.GetItemText(i,2)!=l_Ready)
					m_cReqDVR.SetItemText(i,2,l_Ready);
				break;
			default:
				break;
			}
			break;
		}
	}
	switch(state)
	{
	case 0:
		GetDlgItem(IDC_STATIC_STATE)->GetWindowText(OldText);
		if(OldText!=l_Talking&&nIpAddr==Cur_Talk_Ip)
			GetDlgItem(IDC_STATIC_STATE)->SetWindowText(l_Talking);
		GetDlgItem(IDC_BTN_PLAY)->EnableWindow(FALSE);
		break;
	case 1:
		AddIp(nIpAddr);
		ShowWindow(SW_SHOW);
		break;
	case 5:
		GetDlgItem(IDC_STATIC_STATE)->GetWindowText(OldText);
		if(OldText!=l_Ready&&nIpAddr==Cur_Talk_Ip)
			GetDlgItem(IDC_STATIC_STATE)->SetWindowText(l_Ready);
		GetDlgItem(IDC_BTN_PLAY)->EnableWindow(FALSE);
		break;
	default:
		GetDlgItem(IDC_STATIC_STATE)->GetWindowText(OldText);
		if(OldText!=l_NotConnect)
			GetDlgItem(IDC_STATIC_STATE)->SetWindowText(l_NotConnect);
		GetDlgItem(IDC_STATIC_CURTALKIP)->SetWindowText("");
		GetDlgItem(IDC_BTN_PLAY)->EnableWindow(TRUE);
		break;
	}
}


void CTalkDVRDlg::OnChkRecord() 
{
	// TODO: Add your control notification handler code here
	BOOL bSaveToFile;
	char FileName[FILENAME_MAX];
	CString DateStr;
	int len;
	IN_ADDR InAddr;
	if(((CButton *)GetDlgItem(IDC_CHK_RECORD))->GetCheck()==0)
		bSaveToFile=FALSE;
	else
		bSaveToFile=TRUE;
	CTime CurTime=CTime::GetCurrentTime();
	GetModuleFileName(0,FileName,FILENAME_MAX);
	len=strlen(FileName);
	while(len>0&&FileName[len-1]!='\\'&&FileName[len-1]!=':')
	{
		FileName[len-1]='\0';
		len--;
	}
	strcat(FileName,"TalkRec\\");
	CreateDirectory(FileName,NULL);
	DateStr.Format("%04d_%02d_%02d\\",CurTime.GetYear(),CurTime.GetMonth(),CurTime.GetDay());
	strcat(FileName,(LPCTSTR)DateStr);
	CreateDirectory(FileName,NULL);
	InAddr.s_addr=Cur_Talk_Ip;
	DateStr.Format("%s\\",inet_ntoa(InAddr));
	strcat(FileName,(LPCTSTR)DateStr);
	CreateDirectory(FileName,NULL);
	strcat(FileName,CurTime.Format("%H_%M_%S.str"));
	Con_SetTalkRecord(bSaveToFile,FileName);
}

void CTalkDVRDlg::RemoveReqIp(unsigned long nIpAddr)
{
	int i;
	CString strIp;
	unsigned long uIp;
	for(i=0;i<m_cReqDVR.GetItemCount();i++)
	{
		strIp=m_cReqDVR.GetItemText(i,0);
		uIp=inet_addr(strIp);
		if(uIp==nIpAddr)
		{
			m_cReqDVR.DeleteItem(i);
			break;
		}
	}
}

void CTalkDVRDlg::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	char * l_NotConnect;
	if(ENGLISH)
	{
		l_NotConnect=_T("Not Connect...");
	}
	else
	{
		l_NotConnect=_T("未连接...");
	}
	Con_StopTalk();
	GetDlgItem(IDC_STATIC_STATE)->SetWindowText(l_NotConnect);
	GetDlgItem(IDC_STATIC_CURTALKIP)->SetWindowText("");
	GetDlgItem(IDC_BTN_PLAY)->EnableWindow(TRUE);
	
	CDialog::OnClose();
}

void CTalkDVRDlg::OnDestroy() 
{
	CDialog::OnDestroy();
	
	// TODO: Add your message handler code here
	Con_UnInitTalk();
}

⌨️ 快捷键说明

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