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

📄 querydlg.cpp

📁 VC++开发的一个电话录音程序
💻 CPP
字号:
// QueryDlg.cpp : implementation file
//

#include "stdafx.h"
#include "phonerec.h"
#include "QueryDlg.h"
#include "PhoneRecView.h"
#include "mainfrm.h" 

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

extern CDatabase g_dbCust;

static char	g_szaQueryListTitle[query_max][16] = 
{
		"序号",
		"线号",
		"主叫",
		"去电",
		"开始日期",
		"开始时间",
		"结束时间",
		"录音时长",
		"文件名"
};

static int	g_izQueryListWidth[query_max] = { 65, 43, 90, 90, 100, 80, 80, 80,0 };

extern CPhoneRecView* g_pMgr;

/////////////////////////////////////////////////////////////////////////////
// CQueryDlg dialog


CQueryDlg::CQueryDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CQueryDlg::IDD, pParent)
{
	m_pChannel =  NULL;

	//{{AFX_DATA_INIT(CQueryDlg)
	m_CTimeStart = 0;
	m_CTimeEnd = 0;
	m_strLineID = _T("");
	m_bCheckTime = FALSE;
	m_bCheckPhone = FALSE;
	m_bCheckLineID = FALSE;
	m_strPhoneNum = _T("");
	//}}AFX_DATA_INIT
}


void CQueryDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CQueryDlg)
	DDX_Control(pDX, IDC_BUTTON_SELECT_ALL, m_btnSelectAll);
	DDX_Control(pDX, IDC_BUTTON_PLAY, m_btnPlay);
	DDX_Control(pDX, IDC_BUTTON_STOP_PLAY, m_btnStop);
	DDX_Control(pDX, IDOK, m_btnExit);
	DDX_Control(pDX, IDC_BUTTON_DELETE, m_btnDel);
	DDX_Control(pDX, IDC_BUTTON_QUERY, m_btnQuery);
	DDX_Control(pDX, IDC_LIST_QUERY_RESULT, m_listQuery);
	DDX_DateTimeCtrl(pDX, IDC_DATE_START, m_CTimeStart);
	DDX_DateTimeCtrl(pDX, IDC_DATE_END, m_CTimeEnd);
	DDX_Text(pDX, IDC_EDIT_LINEID, m_strLineID);
	DDX_Check(pDX, IDC_CHECK_QUERY_TIME, m_bCheckTime);
	DDX_Check(pDX, IDC_CHECK_QUERY_PHONE_NUM, m_bCheckPhone);
	DDX_Check(pDX, IDC_CHECK_QUERY_LINEID, m_bCheckLineID);
	DDX_Text(pDX, IDC_EDIT_CALLER_ID, m_strPhoneNum);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CQueryDlg, CDialog)
	//{{AFX_MSG_MAP(CQueryDlg)
	ON_BN_CLICKED(IDC_BUTTON_QUERY, OnButtonQuery)
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)
	ON_BN_CLICKED(IDC_BUTTON_PLAY, OnButtonPlay)
	ON_BN_CLICKED(IDC_BUTTON_STOP_PLAY, OnButtonStopPlay)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_BUTTON_SELECT_ALL, OnButtonSelectAll)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CQueryDlg message handlers

BOOL CQueryDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();

	for( int i = 0; i < query_max; i++ )
	{
		m_listQuery.InsertColumn(i,	g_szaQueryListTitle[i],	LVCFMT_CENTER, g_izQueryListWidth[i] );
	}
	m_listQuery.SetExtendedStyle(LVS_EX_CHECKBOXES | LVS_EX_ONECLICKACTIVATE | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
//	m_listQuery.SetBkColor(RGB(240,247,233));
//	m_listQuery.SetTextBkColor(RGB(240,247,233));

	m_btnQuery.SetIcon( IDR_SEARCH );
	m_btnExit.SetIcon( IDR_EXIT );
	m_btnDel.SetIcon( IDR_DEL );
	m_btnSelectAll.SetIcon( IDR_SELECT_ALL );
	//	m_btnPlay.SetIcon( IDR_PLAY);
	//m_btnPlay.SetBitmaps( IDB_PLAY, RGB( 128, 128, 128 ) );
	//m_btnStop.SetBitmaps( IDB_STOP, RGB( 128, 128, 128 ) );	
	
	CTime curTime = CTime::GetCurrentTime();
	m_CTimeStart = curTime - CTimeSpan( 3, 0, 0, 0 );
	m_CTimeEnd  = curTime;

	m_bCheckTime = TRUE;
	
	UpdateData( FALSE );
		
	return TRUE;                
}

//录音查询
void CQueryDlg::OnButtonQuery() 
{
	UpdateData( );
	m_listQuery.DeleteAllItems();
	if( m_bCheckTime | m_bCheckLineID | m_bCheckPhone )
	{
		CRecordset rs( &g_dbCust );
		
		CString strSerialNo;
		CString strLineID;
		CString strCallerID;
		CString strDTMF;
		CString strDate; 
		CString strStartTime;
		CString strEndTime;
		CString strTimeLong;
		CString strFileAllPath;
		
		m_iRedataCount = 0;
		CTimeSpan OleDateTimeSpan( 1, 0, 0, 0 );
		m_CTimeEnd += OleDateTimeSpan;
		
		
		rs.Open( CRecordset::dynaset, _T( GetQuerySQL( m_bCheckTime, m_bCheckLineID, m_bCheckPhone ) ) );
		
		while( !rs.IsEOF( ) )
		{
			rs.GetFieldValue( "SerialNo", strSerialNo );
			rs.GetFieldValue( "LineID", strLineID );
			rs.GetFieldValue( "CallerID", strCallerID );
			rs.GetFieldValue( "DTMF", strDTMF );
			rs.GetFieldValue( "StartDate", strDate );
			rs.GetFieldValue( "StartTime", strStartTime );
			rs.GetFieldValue( "EndTime", strEndTime );
			rs.GetFieldValue( "TimeLong", strTimeLong );
			rs.GetFieldValue( "FileAllPath", strFileAllPath );

			strDate = strDate.Left( 10 );
			
			char buffer[8];
			sprintf(buffer,"%d",m_iRedataCount);
			m_listQuery.InsertItem(m_iRedataCount,buffer);
			
			m_listQuery.SetItem(m_iRedataCount, 0,LVIF_TEXT, strSerialNo, -1,0,0,0);
			m_listQuery.SetItem(m_iRedataCount, 1,LVIF_TEXT, strLineID, -1,0,0,0);
			m_listQuery.SetItem(m_iRedataCount, 2,LVIF_TEXT, strCallerID, -1,0,0,0);
			m_listQuery.SetItem(m_iRedataCount, 3,LVIF_TEXT, strDTMF, -1,0,0,0);
			m_listQuery.SetItem(m_iRedataCount, 4,LVIF_TEXT, strDate, -1,0,0,0);
			m_listQuery.SetItem(m_iRedataCount, 5,LVIF_TEXT, strStartTime, -1,0,0,0);
			m_listQuery.SetItem(m_iRedataCount, 6,LVIF_TEXT, strEndTime, -1,0,0,0);
			m_listQuery.SetItem(m_iRedataCount, 7,LVIF_TEXT, strTimeLong, -1,0,0,0);
			m_listQuery.SetItem(m_iRedataCount, 8,LVIF_TEXT, strFileAllPath, -1,0,0,0);
			
			m_iRedataCount++;
			
			rs.MoveNext();	
		}
		rs.Close();	
	}
}

CString CQueryDlg::GetQuerySQL(int ichecktime, int icheckLineID, int icheckPhoneNum)
{
	CString strStartDate = m_CTimeStart.Format("%Y-%m-%d");
	CString strEndDate = m_CTimeEnd.Format("%Y-%m-%d");
	
	CString strQuerySql = "Select *  from RecordData where";

	if( ichecktime )
	{
		strQuerySql = "Select *  from RecordData where  StartDate >= #" + strStartDate + "# and StartDate <= #"+ strEndDate + "#";
	}

	if( icheckLineID )
	{
		if( ichecktime )
		{
			strQuerySql += " and LineID = '" + m_strLineID + "'";
		}
		else
		{
			strQuerySql += " LineID = '" + m_strLineID + "'";
		}
	}

	if( icheckPhoneNum )
	{
		if( ichecktime| icheckLineID )
		{
			strQuerySql = strQuerySql +" and CallerID ='" + m_strPhoneNum + "'or DTMF ='" + m_strPhoneNum + "'";
		}
		else
		{
			strQuerySql = strQuerySql +" CallerID ='" + m_strPhoneNum + "'or DTMF ='" + m_strPhoneNum + "'";
		}
	}

	strQuerySql += " order by StartDate ASC, StartTime ASC";
	
	return strQuerySql;
}

void CQueryDlg::OnDestroy() 
{
	if( m_pChannel )
	{
		m_pChannel->StopPlay();
	}
 	CDialog::OnDestroy();
}

void CQueryDlg::OnButtonDelete() 
{
	if( ( ( CMainFrame*)( AfxGetMainWnd( ) ) )->m_userTable.m_ibDelRe )
	{
		
		CString strSerialNo;
		CString strSQLDel;
		for ( int i = m_listQuery.GetItemCount() - 1; i >= 0; i-- )
		{
			if ( m_listQuery.GetCheck( i ) )
			{			
				strSerialNo = m_listQuery.GetItemText( i , 0 );
				
				//删除数据库
				strSQLDel = "delete from RecordData Where SerialNo = '"+ strSerialNo +"'";
				g_dbCust.ExecuteSQL( strSQLDel);
				
				//删除文件
				CString str = m_listQuery.GetItemText( i, query_FileName );
				DeleteFile( str );
				
				//删除记录显示
				m_listQuery.DeleteItem( i );			
			}
		}
	}
	else
	{
		AfxMessageBox("对不起,你没有删除录音数据的权限!");
	}
}


void CQueryDlg::OnButtonPlay() 
{
	CString strPlayTime;
	m_iIndex = 0;

	//规定17通道为放音通道
	m_pChannel = g_pMgr->GetChannelObject( 0 );
	if( m_pChannel )
	{
		m_pChannel->StopPlay();
		PlayFile( m_iIndex );
	}
}
void CQueryDlg::PlayFile(int iIndex)
{
	CString strPlayTime;
	
	if( m_pChannel )
	{		
		m_pChannel->SetVoiceCoder( _DEF_VOICE_CODER );
		
		if( GetPlayFileName( m_iIndex ).GetLength(  )!=0 )
		{
			m_pChannel->PlayFile( m_strFlielName, 0, 0 );
			
			strPlayTime = m_listQuery.GetItemText( m_iIndex-1 , query_TimeLong );
			
			int i = atoi( strPlayTime.Left( 2 ))*3600  + atoi( strPlayTime.Mid( 3,2 ))*60 + atoi( strPlayTime.Right( 2));
			
			SetTimer( 1, i*1000,NULL); 	
		}
	}	
}

CString CQueryDlg::GetPlayFileName( int iIndex )
{
	CString strPlayTime;
	m_strFlielName.Empty();

	for ( int i = iIndex; i <= m_listQuery.GetItemCount() - 1; i++ )
	{
		if( m_listQuery.GetCheck( i ) )
		{
			m_strFlielName = m_listQuery.GetItemText( i , query_FileName );
			
			m_listQuery.SetFocus();
			m_listQuery.SetItemState( i , LVIS_ACTIVATING | LVIS_FOCUSED | LVIS_SELECTED, LVIS_SELECTED | LVIS_FOCUSED );
			CSize size( 0, 10000 );
			m_listQuery.Scroll( size );
			
			m_iIndex = i + 1;
			break;
		}
	}
	return m_strFlielName;
}

void CQueryDlg::OnTimer(UINT nIDEvent) 
{
	KillTimer( 1 );
		
	PlayFile( m_iIndex );
	
	CDialog::OnTimer(nIDEvent);
}

void CQueryDlg::OnButtonStopPlay() 
{
	if( m_pChannel )
	{
		m_pChannel->StopPlay();
	}	
}

//全部选中
void CQueryDlg::OnButtonSelectAll() 
{
	for( int i = 0 ; i <= m_listQuery.GetItemCount()-1; i++ )
	{
		m_listQuery.SetCheck( i );
	}
}


⌨️ 快捷键说明

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