// DLG_SMSLog_Export.cpp : implementation file // #include "stdafx.h" #include "corpsms.h" #include "DLG_SMSLog_Export.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // DLG_SMSLog_Export dialog #include "FSmsLog.h" DLG_SMSLog_Export::DLG_SMSLog_Export(CWnd* pParent /*=NULL*/) : CDialog(DLG_SMSLog_Export::IDD, pParent) { //{{AFX_DATA_INIT(DLG_SMSLog_Export) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_pAdo = NULL; m_pList = NULL; m_bNoStatus = false; } void DLG_SMSLog_Export::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(DLG_SMSLog_Export) DDX_Control(pDX, IDD_SMSLOG_EXPORT_HEAD, m_B_AddHead); DDX_Control(pDX, IDD_SMSLOG_EXPORT_FILENAME, m_E_FileName); DDX_Control(pDX, IDD_SMSLOG_EXPORT_LIST, m_L_List); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(DLG_SMSLog_Export, CDialog) //{{AFX_MSG_MAP(DLG_SMSLog_Export) ON_BN_CLICKED(IDD_SMSLOG_EXPORT_GETFILE, OnSmslogExportGetfile) ON_BN_CLICKED(IDD_SMSLOG_EXPORT_SELALL, OnSmslogExportSelall) ON_BN_CLICKED(IDD_SMSLOG_EXPORT_CLEAR, OnSmslogExportClear) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // DLG_SMSLog_Export message handlers BOOL DLG_SMSLog_Export::OnInitDialog() { CDialog::OnInitDialog(); InitItem(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void DLG_SMSLog_Export::InitItem() { m_L_List.Init(true,-1,0,0); m_L_List.InsertColumn( 0 , _T("顺序") , LVCFMT_LEFT , 40 , 0); m_L_List.InsertColumn( 1 , _T(" 字段名") , LVCFMT_LEFT , 120 , 1); m_L_List.SetTextColor( RGB(0,0,255) ); TCHAR * pItem[] = { _T("接收号码"), _T("接收人"), _T("发送时间"), _T("状态"), _T("内容"), }; TCHAR Buf[256]; for ( int i = 0 ; i<5 ; i++ ) { m_L_List.InsertItem( i , _itot(i+1,Buf,10) ); m_L_List.SetItemText(i , 1 , pItem[i] ); m_L_List.SetItemData(i , i ); //设置这个是为了顺序不至于打乱 } m_L_List.CheckAll(); m_L_List.NoverCheck(); m_L_List.ReShowSort(); } void DLG_SMSLog_Export::OnSmslogExportGetfile() { #define FILE_FILTER_TEXT \ TEXT("txt文本文件 (*.txt)\0*.txt\0")\ TEXT("Excel csv 文件 (*.csv)\0*.csv\0")\ TEXT("所有文件 (*.*)\0*.*;\0\0") TCHAR szFile[ 256 ]; TCHAR szFileB[ 256 ]; *szFileB = NULL; _stprintf( szFile , _T("SmsLog") ); OPENFILENAME sOpen; sOpen.lStructSize = sizeof( sOpen ); sOpen.hwndOwner = this->m_hWnd ; sOpen.Flags = OFN_EXPLORER|OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY; sOpen.lpstrFilter = FILE_FILTER_TEXT; sOpen.lpstrDefExt = _T("txt"); sOpen.lpstrCustomFilter = NULL; sOpen.nMaxCustFilter = 0; sOpen.lpstrFile = szFile; sOpen.nMaxFile = sizeof( szFile ); sOpen.lpstrFileTitle = szFileB; sOpen.nMaxFileTitle = sizeof( szFileB ); sOpen.lpstrInitialDir = NULL; sOpen.lpstrTitle = _T("选择导出列表的文件"); if ( ::GetSaveFileName( &sOpen ) ) { m_E_FileName.SetWindowText(sOpen.lpstrFile); } } void DLG_SMSLog_Export::OnSmslogExportSelall() { m_L_List.CheckAll(); } void DLG_SMSLog_Export::OnSmslogExportClear() { m_L_List.ClearAll(); } void DLG_SMSLog_Export::SetParam(CAdoRecordSet *pAdo, CReportCtrl *pList,BOOL bNoStatus) { m_pAdo = pAdo; m_pList = pList; m_bNoStatus = bNoStatus; } void DLG_SMSLog_Export::OnOK() { long lItemCount = m_L_List.GetItemCount(); long lExPortItem[50];memset(&lExPortItem,0,sizeof(lExPortItem)); for ( int j=0 ; j < 50 ; j++ ) lExPortItem[j] = -1; long lCheckCount = 0; for ( int i=0 ; iGetItemCount(); long lTemp; TCHAR Buf[4096]; TCHAR Buf2[2048]; #ifdef UNICODE char szTempA[4096]; #endif long lRecnCount= 0; //总记录数 long lFileSize = 0; //文件总字节数 long lBufLen = 0; COleDateTime t; if ( m_B_AddHead.GetCheck() )//增加字段头 { _tcscpy(Buf,_T(";")); for ( int j = 0; jGetItemData(i); CString str; str.Format( _T("select * from smslog where SendID=%d") , lSmsID ); if ( m_pAdo->Open(str) && m_pAdo->GetRecordCount()>0 ) { m_pAdo->MoveFirst(); for( int j = 0 ; j< lCheckCount ; j++ ) //按按所选中的字段,取通讯录内容进行保存。 { memset(Buf2 , 0 , sizeof(Buf2) ); switch( lExPortItem[j] ) { case 0: //收信号码 m_pAdo->GetCollect( _T("RecvNum") , Buf2 ); break; case 1: //收信人 m_pAdo->GetCollect( _T("Recver") , Buf2 ); break; case 2: //发送时间 m_pAdo->GetCollect( _T("SubTime") , t ); _stprintf(Buf2,_T("%04d.%02d.%02d %02d:%02d") , t.GetYear(),t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMinute()); break; case 3: //状态 m_pAdo->GetCollect( _T("Status") , lTemp ); #ifdef STATUS_ENABLE_RECV CFSmsLog::GetStatusText( lTemp , Buf2 ); #else CFSmsLog::GetStatusText2( lTemp , Buf2 ); #endif if ( m_bNoStatus ) { _tcscpy( Buf2 , _T("发送成功") ); } break; case 4: //内容 m_pAdo->GetCollect(_T("Msg") , Buf2 ); str=Buf2; str.Replace( _T(",") , _T(",") ); str.Replace( _T("\t") , _T(" ") ); str.Replace( _T("\r\n") , _T(" ") ); str.Replace( _T("\r") , _T(" ") ); str.Replace( _T("\n") , _T(" ") ); _tcscpy(Buf2 , str ); break; } _tcscat(Buf , Buf2 ); if ( j < lCheckCount-1 ) //最后一条不用加","号 _tcscat(Buf , _T(",") ); } } _tcscat(Buf , _T("\r\n") ); //换行 #ifdef UNICODE CAdoRecordSet::Ado_W2A(Buf,szTempA); lBufLen = strlen(szTempA); fTalk.Write( szTempA , lBufLen ); #else lBufLen = _tcslen(Buf); fTalk.Write( Buf , lBufLen ); #endif lRecnCount++; //取得总记录数 lFileSize = lFileSize + lBufLen ; //取得总字节数 } fTalk.Close(); this->EndWaitCursor(); _stprintf(Buf , _T("导出发送日志成功,具体如下:\n导出文件类型:TXT\n导出记录数:%d\n导出字节数:%d\n导出文件名:%s") , lRecnCount , lFileSize , szFileName); MessageBox( Buf , _T("导出成功"),MB_OK|MB_ICONINFORMATION ); CDialog::OnOK(); }