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