// DLG_UBoxPop.cpp : 实现文件 // #include "stdafx.h" #include "CorpSms.h" #include "DLG_UBoxPop.h" #include "afxdialogex.h" #include "MainFrm.h" #include "FUBoxLog.h" #include "DLG_SmsDY.h" #include "DLG_UserSelect.h" // DLG_UBoxPop 对话框 IMPLEMENT_DYNAMIC(DLG_UBoxPop, CDialogEx) DLG_UBoxPop::DLG_UBoxPop(CWnd* pParent /*=NULL*/) : CDialogEx(DLG_UBoxPop::IDD, pParent) { m_lCallingCount = 0; m_strKH_BZ = _T(""); m_strKH_Job = _T(""); m_strCall_BZ = _T(""); m_strCallTime = _T(""); m_strCallType = _T(""); m_strKH_Local = _T(""); m_strKH_LTD = _T(""); m_strKH_Mobile = _T(""); // m_strKH_ = _T(""); m_strKH_Name = _T(""); m_strKH_Tel = _T(""); m_strCall_Number = _T(""); m_strCall_NumberLocal = _T(""); m_lCallStatus = 0; m_lCallWay=0; m_bAddressModify = false; m_lAddressType = 0; m_lUserID = 0; m_bSelGroup = false; m_bCallModify = true; m_bCallSendSms = true; m_bAddressSave = false; m_bCallYModify = false; m_bAddressYModify = false; m_dwCallJT = 0; m_bCallBegin = false; m_bCallEnd = false; m_lUBoxLogID = 0; m_bSaveCallPro = false; m_lCallSC = 0; m_lTickCount = GetTickCount(); m_lBeginTime = 0; m_lGroupID = 0; m_bRecord = false; m_bRecordEnd = false; } DLG_UBoxPop::~DLG_UBoxPop() { int i=10; } void DLG_UBoxPop::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDD_UBOXPOP__KH_BZ, m_strKH_BZ); // DDV_MaxChars(pDX, m_strKH_BZ, 50); DDX_Text(pDX, IDD_UBOXPOP__KH_JOB, m_strKH_Job); DDV_MaxChars(pDX, m_strKH_Job, 30); DDX_Text(pDX, IDD_UBOXPOP_CALLBZ, m_strCall_BZ); DDV_MaxChars(pDX, m_strCall_BZ, 500); DDX_Control(pDX, IDD_UBOXPOP_CALLSTATUS, m_S_CallStatus); DDX_Text(pDX, IDD_UBOXPOP_CALLTIME, m_strCallTime); DDV_MaxChars(pDX, m_strCallTime, 30); DDX_Text(pDX, IDD_UBOXPOP_CALLTYPE, m_strCallType); DDV_MaxChars(pDX, m_strCallType, 30); DDX_Control(pDX, IDD_UBOXPOP_CALLWAY, m_S_CallWay); DDX_Text(pDX, IDD_UBOXPOP_KH_LOCAL, m_strKH_Local); DDV_MaxChars(pDX, m_strKH_Local, 200); DDX_Text(pDX, IDD_UBOXPOP_KH_LTD, m_strKH_LTD); DDV_MaxChars(pDX, m_strKH_LTD, 50); DDX_Text(pDX, IDD_UBOXPOP_KH_MOBILE, m_strKH_Mobile); DDV_MaxChars(pDX, m_strKH_Mobile, 30); DDX_Text(pDX, IDD_UBOXPOP_KH_NAME, m_strKH_Name); DDV_MaxChars(pDX, m_strKH_Name, 24); DDX_Text(pDX, IDD_UBOXPOP_KH_TEL, m_strKH_Tel); DDV_MaxChars(pDX, m_strKH_Tel, 24); DDX_Text(pDX, IDD_UBOXPOP_NUMBER, m_strCall_Number); DDV_MaxChars(pDX, m_strCall_Number, 30); DDX_Text(pDX, IDD_UBOXPOP_NUMBERLOCAL, m_strCall_NumberLocal); DDV_MaxChars(pDX, m_strCall_NumberLocal, 120); DDX_Control(pDX, IDD_UBOXPOP_LIST, m_wndList); } BEGIN_MESSAGE_MAP(DLG_UBoxPop, CDialogEx) ON_WM_TIMER() ON_EN_CHANGE(IDD_UBOXPOP_KH_NAME, &DLG_UBoxPop::OnEnChangeUboxpopKhName) ON_EN_CHANGE(IDD_UBOXPOP_KH_LTD, &DLG_UBoxPop::OnEnChangeUboxpopKhLtd) ON_EN_CHANGE(IDD_UBOXPOP__KH_JOB, &DLG_UBoxPop::OnEnChangeUboxpop) ON_EN_CHANGE(IDD_UBOXPOP_KH_MOBILE, &DLG_UBoxPop::OnEnChangeUboxpopKhMobile) ON_EN_CHANGE(IDD_UBOXPOP_KH_TEL, &DLG_UBoxPop::OnEnChangeUboxpopKhTel) ON_EN_CHANGE(IDD_UBOXPOP__KH_BZ, &DLG_UBoxPop::OnEnChangeUboxpopKhBZ) ON_BN_CLICKED(IDD_UBOXPOP_KH_LOCAL_SEL, &DLG_UBoxPop::OnBnClickedUboxpopKhLocalSel) ON_BN_CLICKED(IDD_UBOXPOP_CALLTYPE_SEL, &DLG_UBoxPop::OnBnClickedUboxpopCalltypeSel) ON_EN_CHANGE(IDD_UBOXPOP_CALLBZ, &DLG_UBoxPop::OnEnChangeUboxpopCallbz) ON_COMMAND_RANGE(UBOXPOP_CALLTYPE_BEGIN,UBOXPOP_CALLTYPE_END,&DLG_UBoxPop::On_CallType) ON_COMMAND_RANGE(UBOXPOP_SMSDY_BEGIN,UBOXPOP_SMSDY_END,&DLG_UBoxPop::On_SmsDY) ON_COMMAND(UBOXPOP_SMSDY_OTHER , &DLG_UBoxPop::On_SmsDY_Other) ON_COMMAND(UBOXPOP_SMSDY_MANAGER , &DLG_UBoxPop::On_SmsDY_Manager) ON_MESSAGE( UBOX_EVENT , UBox_Event ) ON_BN_CLICKED(IDOK, &DLG_UBoxPop::OnBnClickedOk) ON_BN_CLICKED(IDCANCEL, &DLG_UBoxPop::OnBnClickedCancel) ON_BN_CLICKED(IDD_UBOXPOP_CALL_RESMS, &DLG_UBoxPop::OnBnClickedUboxpopCallResms) END_MESSAGE_MAP() // DLG_UBoxPop 消息处理程序 void DLG_UBoxPop::SetMainFrame(CMainFrame * pFrame) { m_pMainFrame = pFrame; } void DLG_UBoxPop::ReSetTitle(void) { CString str; if ( m_lCallWay==0 ) str = _T("呼入"); else str = _T("呼出"); str = str + CString(_T(" ")) + m_strCall_NumberLocal; str = str + CString(_T(" ")) + m_strNumber; str = str + CString(_T(" ")) + m_strKH_Name; str = str + CString(_T(" ")) + m_strKH_LTD; if ( m_lCallingCount>1 ) { CString strTemp; strTemp.Format( _T("%d次"),this->m_lCallingCount); str = str + CString(_T(" ")) + strTemp; } SetWindowText(str); } void DLG_UBoxPop::SetNumber(CString strNumber) { m_strNumber = strNumber; } void DLG_UBoxPop::OnTimer(UINT_PTR nIDEvent) { CDialogEx::OnTimer(nIDEvent); if ( nIDEvent ==1 ) { KillTimer(nIDEvent); GetAddress(); } if ( nIDEvent ==2 ) { if ( m_dwCallJT>0 ) { DWORD dwTime = ::GetTickCount()-m_dwCallJT; long lSec = dwTime/1000; COleDateTimeSpan sc(0,0,0,lSec); CString str; str.Format(_T("%02d:%02d") , sc.GetMinutes(),sc.GetSeconds()); m_S_CallStatus.SetWindowText(str); } } if ( nIDEvent ==7 ) //用于自动接听 { KillTimer(nIDEvent); Call_Begin(); } if ( nIDEvent == 8 ) //用于判断上传通话记录超时 { KillTimer(nIDEvent); Call_Close(); //关闭通话窗口 } } void DLG_UBoxPop::GetAddress(void) { m_AdoRS.SetAdoConnection(&this->m_pMainFrame->m_adoConnection); m_AdoRS2.SetAdoConnection(&this->m_pMainFrame->m_adoConnection); UpdateData(true); CString str; m_bCallModify = true; //默认是允许修改来电属性 m_bCallSendSms = true; //默认是允许回复短信的 m_bAddressSave = false; //默认不是新增通讯录,不能选择保存 //收到DTMF,检查相关数据 if ( m_strNumber.GetLength()>0 ) { BOOL bGetAddress=false; if (m_pMainFrame->GetUserPurview(PURVIEW_GADDRESS_SEE,false)) //有公用通讯录查看权限 { //查用户 str.Format(_T("select * from gaddress where Mobile='%s' or Tel='%s'"),m_strNumber,m_strNumber); if ( m_AdoRS.Open(str) && !m_AdoRS.IsEOF() ) { bGetAddress = true; m_lAddressType = 0; //公用通讯录 m_bSelGroup = false; //已有用户,不允许选择组 /* if (m_pMainFrame->GetUserPurview(PURVIEW_GADDRESS_MODIFY,false)) //有公用通讯录查看权限 { m_bAddressModify = true; //允许修改通讯录 } */ m_bAddressModify = false; //公用通讯录的,不允许修改 m_AdoRS.GetCollect(_T("UserID") , m_lUserID ); m_AdoRS.GetCollect(_T("Name") , m_strKH_Name ); m_AdoRS.GetCollect(_T("LTD") , m_strKH_LTD ); m_AdoRS.GetCollect(_T("Job") , m_strKH_Job ); m_AdoRS.GetCollect(_T("Mobile") , m_strKH_Mobile ); m_AdoRS.GetCollect(_T("Tel") , m_strKH_Tel ); m_AdoRS.GetCollect(_T("BZ") , m_strKH_BZ ); TCHAR szGroupID[32]={0}; m_AdoRS.GetCollect(_T("GroupID") , szGroupID ); TCHAR szLocal[512]={0}; GetLocal(_T("公用通讯录"),_T("gaddress") , szLocal,szGroupID); m_strKH_Local = szLocal; } } if ( !bGetAddress ) { //查用户 str.Format(_T("select * from paddress where Mobile='%s' or Tel='%s'"),m_strNumber,m_strNumber); if ( m_AdoRS.Open(str) && !m_AdoRS.IsEOF() ) { bGetAddress = true; m_lAddressType = 1; //私人通讯录 m_bSelGroup = false; //已有用户,不允许选择组 m_bAddressModify = true; //允许修改通讯录 m_AdoRS.GetCollect(_T("UserID") , m_lUserID ); m_AdoRS.GetCollect(_T("Name") , m_strKH_Name ); m_AdoRS.GetCollect(_T("LTD") , m_strKH_LTD ); m_AdoRS.GetCollect(_T("Job") , m_strKH_Job ); m_AdoRS.GetCollect(_T("Mobile") , m_strKH_Mobile ); m_AdoRS.GetCollect(_T("Tel") , m_strKH_Tel ); m_AdoRS.GetCollect(_T("BZ") , m_strKH_BZ ); TCHAR szGroupID[32]={0}; m_AdoRS.GetCollect(_T("GroupID") , szGroupID ); TCHAR szLocal[512]={0}; GetLocal(_T("私人通讯录"),_T("paddress") , szLocal,szGroupID); m_strKH_Local = szLocal; } } if ( !bGetAddress ) { m_lAddressType = -1; //未知 m_bSelGroup = true; //允许选择用户组 m_bAddressModify = true; //允许修改通讯录 m_bAddressSave = true; //允许选择保存通讯录 m_lAddressType = 1; //私人通讯录 m_strKH_Local = _T("私人通讯录"); m_strKHGroupID = _T(""); //默认保存位置 if ( m_strNumber.Left(1) == _T("1") ) //手机 { m_strKH_Mobile = m_strNumber; } else { m_strKH_Tel = m_strNumber; } } //发出请求,读取通话记录.如果是100000,读取企业ID。 REQ_UBox_GetPro * pGetPro = new REQ_UBox_GetPro; memset(pGetPro , 0 , sizeof(REQ_UBox_GetPro)); pGetPro->lCorpID = m_pMainFrame->m_lCorpID; pGetPro->lUserID = m_pMainFrame->m_lUserID; pGetPro->lTickCount = m_lTickCount; pGetPro->lAddressType = m_lAddressType; pGetPro->lKH_UserID = m_lUserID; _tcscpy(pGetPro->szCallNumber , m_strNumber); pGetPro->bGetCorpPro = false; if ( !bGetAddress && m_pMainFrame->m_lCorpID==100000) { pGetPro->bGetCorpPro = true; } m_pMainFrame->SendFrame(SMSFUNC_UBOX_GETPRO,(BYTE*)pGetPro,sizeof(REQ_UBox_GetPro)); } else { m_lAddressType = -1; //未知 m_bSelGroup = false; //已有用户,不允许选择组 m_bAddressModify = false; //允许修改通讯录 m_bCallSendSms = false; //不允许发送短信 } EnableCtrl(); ReSetTitle(); UpdateData(false); } void DLG_UBoxPop::GetLocal(CString strType,CString strDBName,TCHAR *pLocal, TCHAR *pGroupID) { long lLen = _tcslen( pGroupID ); TCHAR szGroup[16]={0}; TCHAR szTemp[16]={0}; TCHAR szSelect[128]={0}; _stprintf( pLocal , strType ); for ( int i = 1 ; i<= lLen ; i++ ) { _tcsncpy( szGroup , pGroupID , i ); _stprintf( szSelect , _T("select Name from %s where GroupID='%s' AND UserType='0' ") ,strDBName, szGroup ); BOOL b = m_AdoRS.Open( szSelect ); if (b && !m_AdoRS.IsEOF()) { m_AdoRS.GetCollect( _T("Name") , szTemp ); _tcscat( pLocal , _T("\\") ); _tcscat( pLocal , szTemp ); } } } BOOL DLG_UBoxPop::OnInitDialog() { CDialogEx::OnInitDialog(); m_lTickCount = GetTickCount(); //初始化List m_Image.Create(16,16,ILC_COLOR32|ILC_MASK,5,5); m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_CALLIN) ); m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_CALLIN2) ); m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_CALLOUT) ); m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_CALLOUT2) ); m_wndList.SubClassWindow2(); m_wndList.SetHeadings(_T("电话号码,130; 时 间,130;通话时长,80;接听人,90; 姓名,90; 单位名称,200; 备注,220;")); m_wndList.SetGridLines(true); m_wndList.SetImageList(&m_Image,LVSIL_SMALL); m_strCall_Number = m_strNumber; GetLocalTime(&m_tCallTime); m_strCallTime.Format(_T("%02d:%02d:%02d") , m_tCallTime.wHour,m_tCallTime.wMinute,m_tCallTime.wSecond); m_strCall_NumberLocal=_T("未知归属地"); m_strCallType = _T("未分类"); SetCallStatus(); SetCallWay(); UpdateData(false); SetTimer(1,100,NULL); //进行取通讯录操作 if ( m_lCallWay == 1 ) //呼出 { long lDelay = m_pMainFrame->m_Setup.UBox_lPhoneOutDelay; if ( lDelay <7 || lDelay>20 ) lDelay = 7; if ( m_lBeginTime>0 ) SetTimer( 7 , m_lBeginTime*1000 , NULL ); //自动接通,需要立即接通 else SetTimer( 7 , lDelay*1000 , NULL ); //自动接通 } ReSetTitle(); return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE } void DLG_UBoxPop::SetCallStatus(void) { if ( m_lCallStatus ==0 ) { m_S_CallStatus.SetWindowText(_T("未接")); } else { m_S_CallStatus.SetWindowText(_T("已接")); } } void DLG_UBoxPop::SetCallWay(void) { if ( m_lCallWay ==0 ) { m_S_CallWay.SetWindowText(_T("呼入")); } else { m_S_CallWay.SetWindowText(_T("呼出")); } } void DLG_UBoxPop::EnableCtrl(void) { if ( m_bSelGroup ) { GetDlgItem(IDD_UBOXPOP_KH_LOCAL_SEL)->EnableWindow(true); } else { GetDlgItem(IDD_UBOXPOP_KH_LOCAL_SEL)->EnableWindow(false); } if ( m_bCallModify ) { GetDlgItem(IDD_UBOXPOP_CALLTYPE_SEL)->EnableWindow(true); ((CEdit *)GetDlgItem(IDD_UBOXPOP_CALLBZ))->SetReadOnly(false); } else { GetDlgItem(IDD_UBOXPOP_CALLTYPE_SEL)->EnableWindow(false); ((CEdit *)GetDlgItem(IDD_UBOXPOP_CALLBZ))->SetReadOnly(true); } if ( m_bCallSendSms ) { GetDlgItem(IDD_UBOXPOP_CALL_RESMS)->EnableWindow(true); } else { GetDlgItem(IDD_UBOXPOP_CALL_RESMS)->EnableWindow(false); } if ( m_bAddressModify ) { ((CEdit *)GetDlgItem(IDD_UBOXPOP_KH_NAME))->SetReadOnly(false); ((CEdit *)GetDlgItem(IDD_UBOXPOP_KH_LTD))->SetReadOnly(false); ((CEdit *)GetDlgItem(IDD_UBOXPOP__KH_JOB))->SetReadOnly(false); ((CEdit *)GetDlgItem(IDD_UBOXPOP_KH_MOBILE))->SetReadOnly(false); ((CEdit *)GetDlgItem(IDD_UBOXPOP_KH_TEL))->SetReadOnly(false); ((CEdit *)GetDlgItem(IDD_UBOXPOP__KH_BZ))->SetReadOnly(false); } else { ((CEdit *)GetDlgItem(IDD_UBOXPOP_KH_NAME))->SetReadOnly(true); ((CEdit *)GetDlgItem(IDD_UBOXPOP_KH_LTD))->SetReadOnly(true); ((CEdit *)GetDlgItem(IDD_UBOXPOP__KH_JOB))->SetReadOnly(true); ((CEdit *)GetDlgItem(IDD_UBOXPOP_KH_MOBILE))->SetReadOnly(true); ((CEdit *)GetDlgItem(IDD_UBOXPOP_KH_TEL))->SetReadOnly(true); ((CEdit *)GetDlgItem(IDD_UBOXPOP__KH_BZ))->SetReadOnly(true); } if ( m_bAddressSave ) { GetDlgItem(IDD_UBOXPOP__KH_SAVE)->EnableWindow(true); } else { GetDlgItem(IDD_UBOXPOP__KH_SAVE)->EnableWindow(false); } } void DLG_UBoxPop::OnEnChangeUboxpopKhName() { m_bAddressYModify = true; //修改过通讯录资料 } void DLG_UBoxPop::OnEnChangeUboxpopKhLtd() { m_bAddressYModify = true; //修改过通讯录资料 } void DLG_UBoxPop::OnEnChangeUboxpop() { m_bAddressYModify = true; //修改过通讯录资料 } void DLG_UBoxPop::OnEnChangeUboxpopKhMobile() { m_bAddressYModify = true; //修改过通讯录资料 } void DLG_UBoxPop::OnEnChangeUboxpopKhTel() { m_bAddressYModify = true; //修改过通讯录资料 } void DLG_UBoxPop::OnEnChangeUboxpopKhBZ() { m_bCallYModify = true; //修改过通讯属性资料 } void DLG_UBoxPop::OnBnClickedUboxpopKhLocalSel() { DLG_UserSelect dlg(this); dlg.SetParam( m_pMainFrame,_T("paddress"),_T("根目录"),false ); if ( dlg.DoModal()==IDOK ) { m_lGroupID = dlg.GetParam(m_strGroupID); m_bAddressYModify = true; //修改过通讯录资料 m_lAddressType = 1; //私人通讯录 //到GroupID CString str; m_strGroupID = _T(""); str.Format(_T("select * from paddress where UserID=%d") , m_lGroupID ); if ( m_AdoRS.Open(str) && !m_AdoRS.IsEOF() ) { m_AdoRS.GetCollect(_T("GroupID") , m_strGroupID); } TCHAR szLocal[512]={0}; GetLocal(_T("私人通讯录"),_T("paddress") , szLocal,m_strGroupID.GetBuffer(0)); UpdateData(true); m_strKH_Local = szLocal; //m_Address.lAccessGroupID = dlg.GetParam(m_strGroup); UpdateData(false); } } void DLG_UBoxPop::OnBnClickedUboxpopCalltypeSel() { CMenu menu; menu.CreatePopupMenu(); long lCount = m_CallType.GetCount(); for ( long i=0 ; iGetWindowRect(&rect); //this->ClientToScreen(&rect); //显示菜单 menu.TrackPopupMenu(TPM_RIGHTALIGN|TPM_LEFTBUTTON | TPM_RIGHTBUTTON,rect.right,rect.bottom, this, NULL); menu.DestroyMenu(); //m_bCallYModify = true; //修改过通讯属性资料 } void DLG_UBoxPop::OnEnChangeUboxpopCallbz() { m_bCallYModify = true; //修改过通讯属性资料 } BOOL DLG_UBoxPop::ProcessSocket(Socket_Head_Add *pHead, BYTE *pFrame) { try { CString str; //取推荐信息 if (pHead->lFuncType == SMSFUNC_UBOX_GETPRO) { ANS_UBox_GetPro * pGetPro = (ANS_UBox_GetPro *)pFrame; ANS_UBox_CallType * pCallType = (ANS_UBox_CallType *)(pFrame+sizeof(ANS_UBox_GetPro)); ANS_UBox_CallLog * pCallLog = (ANS_UBox_CallLog *)(pFrame+sizeof(ANS_UBox_GetPro)+sizeof(ANS_UBox_CallType)*pGetPro->lCallTypeCount); if ( pGetPro->lTickCount != m_lTickCount ) //不是此窗口发出的,不处理。 { return true; } UpdateData(true); m_strCall_NumberLocal = pGetPro->szCall_Local; if ( pGetPro->bGetCorpPro) { m_strKH_Name = pGetPro->szKH_Name; m_strKH_LTD = pGetPro->szKH_LTD; m_strKH_Job = pGetPro->szKH_Job; m_strKH_Mobile = pGetPro->szKH_Mobile; m_strKH_Tel = pGetPro->szKH_Tel; m_strKH_Local = pGetPro->szKH_Local; m_bCallModify = true; m_bCallSendSms = true; m_bAddressSave = false; m_bAddressModify = false; m_bAddressYModify = false; m_bSelGroup = false; EnableCtrl(); } ReSetTitle(); UpdateData(false); m_CallType.RemoveAll(); for ( long i=0; ilCallTypeCount;i++ ) { ANS_UBox_CallType callType = pCallType[i]; m_CallType.Add(callType); } m_wndList.DeleteAllItems(); for ( i=0 ; i< pGetPro->lCallLogCount ; i++ ) { //m_wndList.SetHeadings(_T("电话号码,90;方向,50; 时 间,120;通话时长,60; 姓名,80; 单位名称,120; 备注,120;")); m_wndList.InsertItem(i,pCallLog[i].szCallNumber,CFUBoxLog::GetCallLogIconIndex(&pCallLog[i])); long lTemp=1; str.Format(_T("%04d.%02d.%02d %02d:%02d") , pCallLog[i].tCallTime.wYear,pCallLog[i].tCallTime.wMonth,pCallLog[i].tCallTime.wDay,pCallLog[i].tCallTime.wHour,pCallLog[i].tCallTime.wMinute); m_wndList.SetItemText(i,lTemp++,str); //通话时间 COleDateTimeSpan span(0,0,0,pCallLog[i].lCallSC); str.Format(_T("%02d:%02d:%02d"),span.GetHours(),span.GetMinutes(),span.GetSeconds()); m_wndList.SetItemText(i,lTemp++,str); //时长 m_wndList.SetItemText(i,lTemp++,pCallLog[i].szUserName); //接听人 m_wndList.SetItemText(i,lTemp++,pCallLog[i].szKHName); //姓名 m_wndList.SetItemText(i,lTemp++,pCallLog[i].szKHLTD); //单位 m_wndList.SetItemText(i,lTemp++,pCallLog[i].szCallBZ); //备注 } return true; } if (pHead->lFuncType == SMSFUNC_UBOX_UPLOAD) { ANS_UBox_UpLoad * pUpload = (ANS_UBox_UpLoad *)pFrame; if ( pUpload->req.lTickCount != m_lTickCount ) //不是此窗口发出的,不处理。 { return true; } if ( pUpload->lUploadStatus == 1 ) { m_lUBoxLogID = pUpload->req.callLog.lUBoxLogID; } Call_Close(); return true; } return false; } catch(...) { } return false; } void DLG_UBoxPop::On_CallType(UINT nID) { UpdateData(true); long lID = nID; long lBegin = UBOXPOP_CALLTYPE_BEGIN; long lIndex = nID-lBegin; m_strCallType = m_CallType.GetAt(lIndex).szType; m_bCallYModify = true; //修改过通讯属性资料 UpdateData(false); } void DLG_UBoxPop::On_SmsDY_Other() { if ( m_pMainFrame->m_pFuncView->On_User_List_Add() ) //新建列表 { //添加内容 m_pMainFrame->m_pFuncView->m_DLGSend.List_SetMsg( _T("") ); //添加号码 long lCount=1; //分配数据 long lSize = sizeof(Send_User)*lCount; BYTE *pS = new BYTE[lSize]; memset( pS , 0 , lSize ); Send_User * pUser = (Send_User * )pS; _tcscpy(pUser->szName,this->m_strKH_Name); _tcscpy(pUser->szMobile,this->m_strNumber); m_pMainFrame->m_pFuncView->On_User_List_AddUser(lCount,(Send_User*)pS); delete pS; } } void DLG_UBoxPop::On_SmsDY_Manager() { DLG_SmsDY dlg(this); dlg.SetParam( &m_AdoRS ); dlg.m_bDblclkSelect = false; //双击不用选择 dlg.DoModal(); } void DLG_UBoxPop::On_SmsDY(UINT nID) { long lID = nID; long lBegin = UBOXPOP_SMSDY_BEGIN; long lIndex = nID-lBegin; if ( lIndex0 && m_strNumber.GetLength()>0 ) { m_pMainFrame->SendSms(m_strNumber,strSmsDY); } } } LONG_PTR DLG_UBoxPop::UBox_Event( WPARAM wParam , LPARAM lParam ) { long lCmd = (long)wParam; CString str; if ( lCmd == UBOX_EVENT_HOOK_UP || lCmd == UBOX_EVENT_HOOK_UP2) //挂机 { if (lCmd== UBOX_EVENT_HOOK_UP2 ) //重复通话的,关闭前一个通话 { CDialogEx::OnCancel(); } Call_End(); return true; } if ( lCmd == UBOX_EVENT_HOOK_OFF ) //摘机 { if ( m_lCallWay ==0 ) //呼入,呼入时摘机为开始接听 { Call_Begin(); //呼叫开始 } if ( m_lCallWay == 1 ) //呼出,呼出是摘机后才能拨号的,如果再次摘机,肯定是结束通话了 { Call_End(); //呼叫结束 } return true; } if ( lCmd == UBOX_EVENT_WJ ) //未接 { if ( m_lCallWay ==0 ) //呼入,呼入时出现未接为接呼结束,呼叫时间为0 { Call_End(); //呼叫结束 } if ( m_lCallWay == 1 ) //呼出,呼出是摘机后才能拨号的,如果再次摘机,肯定是结束通话了 { Call_End(); //呼叫结束 } return true; } return 0; } void DLG_UBoxPop::Call_End(void) { #ifdef SUPPER_UBOX KillTimer(2); //结束用于显示时间的Timer KillTimer(7); //结束用于自动接听的Timer //if ( m_bCallEnd ) //此呼叫是已结束的,不用再处理 // return; m_bCallEnd = true; //计算通话时长 if ( m_dwCallJT>0 && m_lCallSC<=0 ) { DWORD dwTime = ::GetTickCount()-m_dwCallJT; m_lCallSC = dwTime/1000; } //停止录音 if ( m_bRecord ) { m_bRecordEnd = true; m_pMainFrame->m_ubox_stop_record(m_pMainFrame->m_ubox_endHandle); } if ( this->m_lUBoxLogID <=0 ) { //为拨号界面增加拨号日志 this->m_pMainFrame->m_DlgUBoxDial.AddCallLog(m_strNumber,m_lCallWay,m_lCallStatus); //将数据上传到服务器 Call_Upload(); } #endif } void DLG_UBoxPop::Call_Begin(void) { #ifdef SUPPER_UBOX KillTimer(7); //结束用于自动接听的Timer if ( m_bCallBegin ) //此呼叫是已开始的,不用处理 return ; if ( m_bCallEnd ) //此呼叫是已结束的,不用处理 return ; m_bCallBegin = true; m_dwCallJT = GetTickCount(); m_lCallStatus =1 ;//通话状态变化已接 m_S_CallStatus.SetWindowText(_T("00:00")); SetTimer(2 , 1000 , NULL ); if ( !m_bRecord && m_pMainFrame->m_Setup.UBox_bAutoRecord ) //未开始录音,进行录音操作 { //取录音文件名 m_bRecordEnd = false; //未录音完成 TCHAR szPath[512]={0}; m_pMainFrame->GetCurrentPath(szPath); _tcscat(szPath , _T("Record") ); ::CreateDirectory(szPath , NULL ); //有理没理,先创建文件夹 SYSTEMTIME t;::GetLocalTime(&t); m_strRecordName.Format( _T("%s\\%04d%02d%02d%02d%02d%02d%d.mp3"),szPath,t.wYear,t.wMonth,t.wDay,t.wHour,t.wMinute,t.wSecond,t.wMilliseconds); m_pMainFrame->m_ubox_stop_record(m_pMainFrame->m_ubox_endHandle); //CODER_ALAW //CODER_MP3 #ifdef _UNICODE int iRet = m_pMainFrame->m_ubox_record_file(m_pMainFrame->m_ubox_endHandle,CW2A(m_strRecordName),CODER_ALAW); #else int iRet = m_pMainFrame->m_ubox_record_file(m_pMainFrame->m_ubox_endHandle,m_strRecordName,CODER_MP3); #endif if ( iRet ==0 ) { m_bRecord = true; } } #endif } void DLG_UBoxPop::SetCallCount(long lCount) { this->m_lCallingCount = lCount; } void DLG_UBoxPop::SetCallWay(long lCallWay) { m_lCallWay = lCallWay; } void DLG_UBoxPop::Call_Upload(void) { UpdateData(true); REQ_UBox_UpLoad * pUpload = new REQ_UBox_UpLoad; memset(pUpload , 0 , sizeof(REQ_UBox_UpLoad)); pUpload->callLog.lUBoxLogID = m_lUBoxLogID; pUpload->lCorpID = m_pMainFrame->m_lCorpID; pUpload->lUserID = m_pMainFrame->m_lUserID; pUpload->lTickCount = m_lTickCount; pUpload->callLog.lCorpID = pUpload->lCorpID; pUpload->callLog.lUserID = pUpload->lUserID; _tcscpy(pUpload->callLog.szUserName , m_pMainFrame->m_pCurUser->szUser); pUpload->callLog.lCallStatus = m_lCallStatus; pUpload->callLog.lCallWay = m_lCallWay; pUpload->callLog.tCallTime = m_tCallTime; _tcscpy(pUpload->callLog.szCallLocal ,this->m_strCall_NumberLocal); _tcscpy(pUpload->callLog.szCallNumber ,m_strNumber); pUpload->callLog.lCallSC = m_lCallSC; if ( m_bSaveCallPro ) { _tcscpy(pUpload->callLog.szCallType ,m_strCallType); _tcscpy(pUpload->callLog.szCallBZ ,m_strCall_BZ); } pUpload->callLog.lKHAddressType = m_lAddressType; pUpload->callLog.lKHUserID = m_lUserID; _tcscpy(pUpload->callLog.szKHName ,m_strKH_Name); _tcscpy(pUpload->callLog.szKHLTD ,m_strKH_LTD); m_pMainFrame->SendFrame(SMSFUNC_UBOX_UPLOAD,(BYTE*)pUpload,sizeof(REQ_UBox_UpLoad)); SetTimer(8 , 30000 , NULL ); //30秒后超时检测 } void DLG_UBoxPop::OnBnClickedOk() { m_bSaveCallPro = true; //需要保存通话属性 UpdateData(true); if ( m_bAddressYModify ) //已修改过通讯录 { CString str; if ( m_bAddressModify && m_lAddressType==1 && m_lUserID>0 ) //私人通讯录的允许直接修改 { str.Format(_T("Update paddress set Name='%s',Ltd='%s',Job='%s',Mobile='%s',Tel='%s',BZ='%s' where UserID=%d") , SqlStr(m_strKH_Name),SqlStr(m_strKH_LTD),SqlStr(m_strKH_Job),SqlStr(m_strKH_Mobile),SqlStr(m_strKH_Tel),SqlStr(m_strKH_BZ),m_lUserID); m_AdoRS.Open(str); m_AdoRS.Close(); } if ( m_bAddressModify && m_lAddressType==1 && m_lUserID<=0 ) //私人通讯录的允许直接修改 { //添加私人通讯录 CString strGroupID = m_strGroupID; str.Format(_T("insert into paddress (GroupID,UserType,Name,Ltd,Job,Mobile,Tel,BZ) values ('%s','1','%s','%s','%s','%s','%s','%s')") , strGroupID,SqlStr(m_strKH_Name),SqlStr(m_strKH_LTD),SqlStr(m_strKH_Job),SqlStr(m_strKH_Mobile),SqlStr(m_strKH_Tel),SqlStr(m_strKH_BZ),m_lUserID); m_AdoRS.Open(str); str.Format(_T("select top 1 * from paddress order by UserID desc")); if ( m_AdoRS.Open(str) && !m_AdoRS.IsEOF()) { m_AdoRS.GetCollect(_T("UserID") , m_lUserID); } m_AdoRS.Close(); } } Call_Upload(); CDialogEx::OnOK(); } void DLG_UBoxPop::OnBnClickedCancel() { if ( this->m_bAddressYModify || this->m_bCallYModify ) { int iRet = MessageBox(_T("通讯录或通话属性已做过修改,需要保存吗?") , _T("提示") , MB_ICONQUESTION|MB_YESNO); if ( iRet == IDYES ) { OnBnClickedOk(); return ; } } m_bSaveCallPro = false; //不需要保存通话属性 CDialogEx::OnCancel(); Call_Close(); } void DLG_UBoxPop::Call_Close(void) { if ( m_bRecordEnd && m_lUBoxLogID) //录音结束 { CString strFileName; //改名 TCHAR szPath[512]={0}; m_pMainFrame->GetCurrentPath(szPath); _tcscat(szPath , _T("Record") ); ::CreateDirectory(szPath , NULL ); //有理没理,先创建文件夹 strFileName.Format( _T("%s\\%d.mp3"),szPath,m_lUBoxLogID); //进行改名操作 if ( strFileName!=m_strRecordName ) { MoveFile(m_strRecordName,strFileName ); m_strRecordName = strFileName; if ( m_pMainFrame->m_Setup.UBox_lReocrdDel>0 && this->m_lCallSC < m_pMainFrame->m_Setup.UBox_lReocrdDel ) //长度不够,删除 { ::DeleteFile(m_strRecordName); } else { m_pMainFrame->UBox_AddUploadRecordFile(m_lUBoxLogID,m_strRecordName); } } } if ( m_bCallEnd && !IsWindowVisible() ) { //通话结束并且窗口关闭,可以结束本窗口了 m_pMainFrame->uboxPop_Del(this); OnCancel(); } } void DLG_UBoxPop::OnCancel() { // TODO: 在此添加专用代码和/或调用基类 //CDialogEx::OnCancel(); DestroyWindow(); } void DLG_UBoxPop::PostNcDestroy() { CDialogEx::PostNcDestroy(); delete this; } void DLG_UBoxPop::SetCallBeginTime(long lBeginTime) { m_lBeginTime = lBeginTime; } void DLG_UBoxPop::OnBnClickedUboxpopCallResms() { m_SmsDY.RemoveAll(); CMenu menu; menu.CreatePopupMenu(); long lMaxPopMenu=32; CMenu popMenu[32]; CString str; str.Format(_T("Select * from smsdytype")); m_AdoRS.Open(str); long lIndex=0; long lItemCount=0; while(!m_AdoRS.IsEOF() && lIndex0 ) { m_SmsDY.Add(strMsg); popMenu[lIndex].AppendMenu( MF_STRING , UBOXPOP_SMSDY_BEGIN + lItemCount , strMsg ); lItemCount++; } m_AdoRS2.MoveNext(); } m_AdoRS.MoveNext(); lIndex ++; } menu.AppendMenu(MF_SEPARATOR ); menu.AppendMenu( MF_STRING , UBOXPOP_SMSDY_OTHER , _T("其它短信内容") ); menu.AppendMenu(MF_SEPARATOR ); menu.AppendMenu( MF_STRING , UBOXPOP_SMSDY_MANAGER , _T("常用短语管理") ); CRect rect; GetDlgItem(IDD_UBOXPOP_CALL_RESMS)->GetWindowRect(&rect); //this->ClientToScreen(&rect); //显示菜单 menu.TrackPopupMenu(TPM_RIGHTALIGN|TPM_LEFTBUTTON | TPM_RIGHTBUTTON,rect.right,rect.bottom, this, NULL); menu.DestroyMenu(); }