// FFaxJS.cpp : implementation file // #include "stdafx.h" #include "CorpSms.h" #include "FFaxJS.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CFFaxJS dialog #include "MainFrm.h" #include "ProcessSocket.h" #include "DLG_RecvSms.h" #include "DLG_SmsLogSee.h" //#include "DLG_FAXJS_Export.h" #include "DLG_TypeSetup.h" #ifdef SUPPERGSM #include "..\public\SendThread\SendThread.h" #endif #include "DLG_Find_RecvSms.h" CFFaxJS::CFFaxJS(CWnd* pParent /*=NULL*/) : CDialog(CFFaxJS::IDD, pParent) { //{{AFX_DATA_INIT(CFFaxJS) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_bInit = false; m_bRefresh = false; memset(&m_Setup,0,sizeof(m_Setup)); #ifdef SUPPERGSM m_pSendThread = NULL; #endif m_bOneGetSim = true; m_lMobileRecvCount = 0; m_pMenuType = NULL; m_lMenuTypeCount = 0; m_bShowToday = true; m_bRecvFirst = true; m_lIconCount = 0; } void CFFaxJS::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CFFaxJS) DDX_Control(pDX, IDC_FAXJS_LIST, m_wndList); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CFFaxJS, CDialog) //{{AFX_MSG_MAP(CFFaxJS) ON_WM_SIZE() ON_NOTIFY(LVN_KEYDOWN, IDC_FAXJS_LIST, OnKeydownSmsjsList) ON_NOTIFY(NM_RCLICK, IDC_FAXJS_LIST, OnRclickSmsjsList) ON_NOTIFY(NM_DBLCLK, IDC_FAXJS_LIST, OnDblclkSmsjsList) ON_WM_TIMER() ON_WM_DESTROY() //}}AFX_MSG_MAP ON_COMMAND( MENU_FAXJS_DEL , On_User_Del ) ON_COMMAND( MENU_FAXJS_SEE , On_User_See ) ON_COMMAND( MENU_FAXJS_SEND , On_User_Send ) ON_COMMAND( MENU_FAXJS_ZF , On_User_ZF ) ON_COMMAND( MENU_FAXJS_EXPORT , On_User_Export ) ON_COMMAND( MENU_FAXJS_REFRESH , On_User_Refresh ) ON_COMMAND( MENU_FAXJS_FIND , On_User_Find ) ON_COMMAND( MENU_FAXJS_TYPESETUP , On_User_TypeSetup ) #ifdef SUPPERGSM ON_MESSAGE( TW_INIT , On_TW_Init ) //串口线程返回的消息 ON_MESSAGE( TW_SEND , On_TW_Send ) ON_MESSAGE( TW_RECV , On_TW_Recv ) ON_MESSAGE( TW_GETSIM , On_TW_GetSim ) ON_MESSAGE( TW_CLEAR , On_TW_Clear ) ON_MESSAGE( TW_DELETE , On_TW_Delete ) #endif END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CFFaxJS message handlers BOOL CFFaxJS::OnInitDialog() { USES_CONVERSION; CDialog::OnInitDialog(); //取得共用参数 //CMainFrame * pFrame = static_cast ((CMainFrame *)AfxGetMainWnd()); this->GetParent()->GetParentFrame(); m_pMainFrame = (CMainFrame *)this->GetParent()->GetParentFrame(); m_pSocket = &m_pMainFrame->m_Socket; m_AdoRS.SetAdoConnection( &m_pMainFrame->m_adoConnection ); m_AdoRS2.SetAdoConnection( &m_pMainFrame->m_adoConnection ); //连接到号段表 TCHAR szPath[512]={0}; m_pMainFrame->GetCurrentPath( szPath ); _tcscat( szPath , _T("SMSData.dat") ); //数据库文件名 //解密码 char szPasswd[64]={0};strcpy(szPasswd , ACCESS_PASSWD ); char szKey[64]={0};strcpy( szKey , ACCESS_KEY ); char szNew2[64]={0};long lOut=sizeof(szNew2); TCHAR szNew[64]={0}; CDes des; des.Decrypt( szPasswd , strlen(szPasswd),szNew2,lOut,szKey,8); #ifdef UNICODE _tcscpy(szNew,A2W(szNew2)); #else strcpy(szNew,szNew2); #endif if ( !m_HDadoConnection.ConnectAccess(szPath,szNew ) ) //连接数据库错误,需要重新创建 { MessageBox( _T("系统文件丢失6,请重新安装!") , _T("致命错误") , MB_ICONWARNING ); return false; } m_HDAdoRS.SetAdoConnection( &m_HDadoConnection ); //设置连接 //初始化List m_Image.Create(16,16,ILC_COLOR32|ILC_MASK,5,5); m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_SMSDF) ); m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_SMSJS) ); m_wndList.SubClassWindow2(); #ifdef YQ_VER m_wndList.SetHeadings(_T("序号,50; 发送号码,120;发送人,100;接收号码,120; 短信内容,280;收信时间,130;短信分类,100;手机归属地,120;")); #else #ifdef MOBSET_OEM_SNLD m_wndList.SetHeadings(_T("序号,50; 发送号码,120;发送人,80;接收号码,120; 短信内容,200;收信时间,130;昵称,80;性别,50; 生日,90; 公司,80;职务,80;电话,80;传真,80;Email,80;QQ,80;备注,80;")); #else #ifdef MOBSET_OEM_BYSZY m_wndList.SetHeadings(_T("序号,50; 发送号码,120;发送人,100;接收号码,120; 短信内容,280;收信时间,130;手机归属地,120;归属用户组,120;")); #else m_wndList.SetHeadings(_T("序号,50; 发送号码,120;发送人,100;接收号码,120; 短信内容,280;收信时间,130;手机归属地,120;")); #endif #endif #endif m_wndList.SetGridLines(true); m_wndList.SetImageList(&m_Image,LVSIL_SMALL); //m_wndList.SetBkColor( RGB(237,191,175) ); //m_wndList.SetTextBkColor( RGB(237,191,175) ); m_bInit = true; //SetTimer( 1 , 1000 , NULL ); //进行连接手机操作 return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } BOOL CFFaxJS::ReHide() { ShowWindow( SW_HIDE ); return true; } BOOL CFFaxJS::ReShow(BOOL bRefresh) { ShowWindow( SW_SHOW ); if ( bRefresh || !m_bRefresh ) { RefreshInfo(); } return true; } BOOL CFFaxJS::RefreshInfo() { m_wndList.ShowWindow( SW_HIDE ); //为了加快显示速度 m_bRefresh = true; m_wndList.DeleteAllItems(); TCHAR szSelect[512]={0}; if ( m_bShowToday ) { //仅查询当天的 SYSTEMTIME t;::GetLocalTime(&t); if ( m_pMainFrame->m_Setup.bSQLUse ) _stprintf( szSelect , _T("select * from smsRecv where RecvTime>='%04d%02d%02d' %s order by RecvTime"),t.wYear,t.wMonth,t.wDay,m_strFindAdd ); //查询已发短信 else _stprintf( szSelect , _T("select * from smsRecv where RecvTime>=#%04d-%02d-%02d# %s order by RecvTime"),t.wYear,t.wMonth,t.wDay,m_strFindAdd ); //查询已发短信 } else { if ( m_strFindAdd.GetLength()>0 ) _stprintf( szSelect , _T("select * from smsRecv where 1 %s order by RecvTime"),m_strFindAdd ); //查询接收记录 else _stprintf( szSelect , _T("select * from smsRecv order by RecvTime") ); //查询接收记录 } //_stprintf( szSelect , _T("select * from smsRecv") ); //查询接收记录 BOOL b = m_AdoRS.Open( szSelect ); COleDateTime tRecv; long lCount = m_AdoRS.GetRecordCount(); if ( b && lCount ) { m_AdoRS.MoveFirst(); long iItem = 0; while( !m_AdoRS.IsEOF() ) { long lRecvID; BOOL bRead; TCHAR szSendNum[128]={0}; TCHAR szSender[32]={0}; TCHAR szRecvNum[32]={0}; TCHAR szMsg[180]={0}; TCHAR szType1[64]={0}; TCHAR szType2[32]={0}; TCHAR szProvince[64]={0}; TCHAR szCity[32]={0}; m_AdoRS.GetCollect( _T("RecvID") , lRecvID ); m_AdoRS.GetCollect( _T("Reader") , bRead ); m_AdoRS.GetCollect( _T("SendNum") , szSendNum ); m_AdoRS.GetCollect( _T("Sender") , szSender ); m_AdoRS.GetCollect( _T("RecvNum") , szRecvNum ); m_AdoRS.GetCollect( _T("Msg") , szMsg ); m_AdoRS.GetCollect( _T("RecvTime"), tRecv ); m_AdoRS.GetCollect( _T("Province") , szProvince ); m_AdoRS.GetCollect( _T("City") , szCity ); #ifdef MOBSET_OEM_SNLD CString NickName; CString Sex; COleDateTime Birthday; CString Ltd; CString Job; CString Tel; CString Fax; CString Email; CString QQ; CString BZ; m_AdoRS.GetCollect( _T("NickName") , NickName ); m_AdoRS.GetCollect( _T("Sex") , Sex ); m_AdoRS.GetCollect( _T("Birthday") , Birthday ); m_AdoRS.GetCollect( _T("Ltd") , Ltd ); m_AdoRS.GetCollect( _T("Job") , Job ); m_AdoRS.GetCollect( _T("Tel") , Tel ); m_AdoRS.GetCollect( _T("Fax") , Fax ); m_AdoRS.GetCollect( _T("Email") , Email ); m_AdoRS.GetCollect( _T("QQ") , QQ ); m_AdoRS.GetCollect( _T("BZ") , BZ ); #endif #ifdef MOBSET_OEM_BYSZY CString Local; m_AdoRS.GetCollect( _T("LocalGroup") , Local ); #endif // //m_wndList.SetHeadings(_T("序号,50; 发送号码,100;接收号码,80; 短信内容,280;收信时间,120;")); //m_wndList.SetHeadings(_T("序号,50; 发送号码,150;接收号码,120; 短信内容,280;收信时间,130;短信分类,100;手机归属地,120;")); m_wndList.InsertItem( 0 , _itot( iItem+1,szSelect,10) , bRead ); //已读与未读图标不一样 m_wndList.SetItemData( 0,lRecvID ); #ifdef MOBSET_OEM_SNLD //m_wndList.SetHeadings(_T("序号,50; 发送号码,120;发送人,80;接收号码,120; 短信内容,200;收信时间,130;昵称,80;性别,50; 公司,80;职务,80;电话,80;传真,80;Email,80;QQ,80;备注,80;")); m_wndList.SetItemText(0,1,szSendNum); m_wndList.SetItemText(0,2,szSender); m_wndList.SetItemText(0,3,szRecvNum); m_wndList.SetItemText(0,4,szMsg); if ( tRecv.GetStatus() == COleDateTime::valid ) { _stprintf( szMsg , _T("%04d.%02d.%02d %02d:%02d") , tRecv.GetYear(),tRecv.GetMonth(),tRecv.GetDay(),tRecv.GetHour(),tRecv.GetMinute() ); m_wndList.SetItemText(0,5,szMsg); } m_wndList.SetItemText(0,6,NickName); m_wndList.SetItemText(0,7,Sex); if ( Birthday.GetStatus() == COleDateTime::valid ) { _stprintf( szMsg , _T("%04d.%02d.%02d") ,Birthday.GetYear(), Birthday.GetMonth(),Birthday.GetDay() ); m_wndList.SetItemText(0,8,szMsg); } m_wndList.SetItemText(0,9,Ltd); m_wndList.SetItemText(0,10,Job); m_wndList.SetItemText(0,11,Tel); m_wndList.SetItemText(0,12,Fax); m_wndList.SetItemText(0,13,Email); m_wndList.SetItemText(0,14,QQ); m_wndList.SetItemText(0,15,BZ); #else m_wndList.SetItemText(0,1,szSendNum); m_wndList.SetItemText(0,2,szSender); m_wndList.SetItemText(0,3,szRecvNum); m_wndList.SetItemText(0,4,szMsg); if ( tRecv.GetStatus() == COleDateTime::valid ) { _stprintf( szMsg , _T("%04d.%02d.%02d %02d:%02d") , tRecv.GetYear(),tRecv.GetMonth(),tRecv.GetDay(),tRecv.GetHour(),tRecv.GetMinute() ); m_wndList.SetItemText(0,5,szMsg); } if ( _tcslen(szCity)>0 ) { _tcscat( szProvince , _T("-") ); _tcscat( szProvince , szCity ); } #ifdef YQ_VER m_AdoRS.GetCollect( _T("Type1") , szType1 ); m_AdoRS.GetCollect( _T("Type2") , szType2 ); if ( _tcslen(szType2)>0 ) { _tcscat( szType1 , _T("-") ); _tcscat( szType1 , szType2 ); } m_wndList.SetItemText(0,6,szType1); m_wndList.SetItemText(0,7,szProvince); #else m_wndList.SetItemText(0,6,szProvince); #endif #ifdef MOBSET_OEM_BYSZY m_wndList.SetItemText(0,7,Local); #endif #endif iItem++; m_AdoRS.MoveNext(); } } m_wndList.ShowWindow( SW_SHOW ); //为了加快显示速度 RecvSms(); //取新的短信内容 FlashIcon(true,false); //闪动图标 return true; } void CFFaxJS::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); if ( m_bInit ) { m_wndList.MoveWindow( 0 , 0 , cx,cy); } } long CFFaxJS::GetCurrentSelected() { POSITION pos = m_wndList.GetFirstSelectedItemPosition(); if ( pos ) { return m_wndList.GetNextSelectedItem(pos); } return -1; } void CFFaxJS::OnKeydownSmsjsList(NMHDR* pNMHDR, LRESULT* pResult) { LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR; *pResult = 0; if ( pLVKeyDow->wVKey == VK_DELETE ) { On_User_Del(); } if ( pLVKeyDow->wVKey == VK_SPACE) { On_User_See(); } if ( pLVKeyDow->wVKey == 'S' || pLVKeyDow->wVKey == 's') { On_User_Send(); } if ( pLVKeyDow->wVKey == 'Z' || pLVKeyDow->wVKey == 'z') { On_User_ZF(); } if ( pLVKeyDow->wVKey == 'R' || pLVKeyDow->wVKey == 'r') { On_User_Refresh(); } if ( pLVKeyDow->wVKey == 'F' || pLVKeyDow->wVKey == 'f') { On_User_Find(); } if ( pLVKeyDow->wVKey == 'A' || pLVKeyDow->wVKey == 'a') { m_wndList.SelectAllItems(); } } void CFFaxJS::RecvSms() { //没有权限 if ( !m_pMainFrame->GetUserPurview( PURVIEW_RECVG , false ) && !m_pMainFrame->GetUserPurview( PURVIEW_RECVP , false ) ) return ; REQ_Recv2 * pRecv = new REQ_Recv2; pRecv->lCorpID = m_pMainFrame->m_lCorpID; pRecv->lUserID = m_pMainFrame->m_lUserID; m_pMainFrame->SendFrame( SMSFUNC_RECV2 , (BYTE*)pRecv , sizeof(REQ_Recv2)); } BOOL CFFaxJS::ProcessSocket(Socket_Head *pHead) { //收到短信 if (pHead->lFuncType == SMSFUNC_RECV) { ANS_Recv * pRecv = (ANS_Recv *)pHead->pFrame; ANS_RecvData * pData = (ANS_RecvData *)(pHead->pFrame+sizeof(ANS_Recv)); m_wndList.ShowWindow( SW_HIDE ); //为了加快显示速度 //添加到数据库里 for ( int i = 0;ilCount;i++) { ANS_RecvData2 sms={0}; sms.lLogID = pData->lLogID; _tcscpy(sms.szRecvNum , pData->szRecvNum ); _tcscpy(sms.szSendNum , pData->szSendNum ); _tcscpy(sms.szMsg , pData->szMsg ); sms.tRecv = pData->tRecv; RecvNewSms(sms,i<3?true:false); pData++; //显示下一条 } m_wndList.ShowWindow( SW_SHOW ); //为了加快显示速度 if ( m_bRecvFirst && pRecv->lCount <= 0 ) //没收到新的短信 { m_bRecvFirst = false; CString str; str = _T("select count(*) as abc from smsrecv where Reader=0 or Reader is NULL"); if ( m_AdoRS.Open(str) && m_AdoRS.GetRecordCount()>0 ) { long lRead=0; m_AdoRS.MoveFirst(); m_AdoRS.GetCollect(_T("abc"),lRead); m_AdoRS.Close(); if ( lRead>0 ) { SMS_Recv2 sms2={0}; //_stprintf( sms2.szMsg , _T("你有%d条未读短信!"),lRead ); //_tcscpy( sms2.szSender , _T("短信易提醒") ); _stprintf( sms2.szTime , _T("你有%d条未读短信!"),lRead ); DLG_RecvSms * dlg = new DLG_RecvSms; dlg->Create(IDD_RECVSMS , this); //dlg->SetPara( &sms2,_T("短信易提醒") ); dlg->SetPara( &sms2,_T("未读短信提醒") ); dlg->ShowWindow( SW_SHOW); this->SetFocus(); } } } return true; } //收到短信 if (pHead->lFuncType == SMSFUNC_RECV2) { ANS_Recv2 * pRecv = (ANS_Recv2 *)pHead->pFrame; ANS_RecvData2 * pData = (ANS_RecvData2 *)(pHead->pFrame+sizeof(ANS_Recv2)); m_wndList.ShowWindow( SW_HIDE ); //为了加快显示速度 //添加到数据库里 for ( int i = 0;ilCount;i++) { RecvNewSms(*pData,i<3?true:false); pData++; //显示下一条 } m_wndList.ShowWindow( SW_SHOW ); //为了加快显示速度 if ( m_bRecvFirst && pRecv->lCount <= 0 ) //没收到新的短信 { m_bRecvFirst = false; CString str; str = _T("select count(*) as abc from smsrecv where Reader=0 or Reader is NULL"); if ( m_AdoRS.Open(str) && m_AdoRS.GetRecordCount()>0 ) { long lRead=0; m_AdoRS.MoveFirst(); m_AdoRS.GetCollect(_T("abc"),lRead); m_AdoRS.Close(); if ( lRead>0 ) { SMS_Recv2 sms2={0}; //_stprintf( sms2.szMsg , _T("你有%d条未读短信!"),lRead ); //_tcscpy( sms2.szSender , _T("短信易提醒") ); _stprintf( sms2.szTime , _T("你有%d条未读短信!"),lRead ); DLG_RecvSms * dlg = new DLG_RecvSms; dlg->Create(IDD_RECVSMS , this); dlg->SetPara( &sms2,_T("未读短信提醒") ); //dlg->SetPara( &sms2,"短信易提醒" ); dlg->ShowWindow( SW_SHOW); this->SetFocus(); } } } return true; } return false; } void CFFaxJS::On_User_See() { long lItem = GetCurrentSelected(); if ( lItem <0 ) return ; SMS_See sms = GetSms(lItem); CString strSendNum = sms.szSender; if ( _tcslen(sms.szSender2) ) { _tcscat(sms.szSender,_T("-") ); _tcscat(sms.szSender,sms.szSender2); } ReadSms(lItem); //状态变为已读 DLG_SmsLogSee dlg(this); sms.lType = SMS_SEE_TYPE_RECV; dlg.SetParam(sms); dlg.SetReadSms(true); if ( dlg.DoModal() == 300 ) //按了立即回复 { 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 , sms.szSender2 ); _tcscpy(pUser->szMobile , strSendNum ); m_pMainFrame->m_pFuncView->On_User_List_AddUser(lCount,(Send_User*)pS); delete pS; } } } void CFFaxJS::On_User_Send() { long lItem = GetCurrentSelected(); if ( lItem <0 ) return ; ReadSms(lItem); //状态变为已读 if ( m_pMainFrame->m_pFuncView->On_User_List_Add() ) //新建列表 { //添加号码 long lCount = m_wndList.GetSelectedCount(); if ( lCount <= 0 ) return ; //分配数据 long lSize = sizeof(Send_User)*lCount; BYTE *pS = new BYTE[lSize]; memset( pS , 0 , lSize ); Send_User * pUser = (Send_User * )pS; TCHAR szSelect[128]={0}; POSITION pos = m_wndList.GetFirstSelectedItemPosition(); while ( pos ) { long lItem = m_wndList.GetNextSelectedItem( pos ); long lRecvID = m_wndList.GetItemData( lItem ); if ( lRecvID > 0 ) { _stprintf( szSelect , _T("select * from smsrecv where RecvID=%d"), lRecvID ); BOOL b = m_AdoRS.Open( szSelect ); if ( b && m_AdoRS.GetRecordCount() ) { m_AdoRS.MoveFirst(); m_AdoRS.GetCollect( _T("Sender") , pUser->szName); m_AdoRS.GetCollect( _T("SendNum") , pUser->szMobile); } } pUser ++; } m_pMainFrame->m_pFuncView->On_User_List_AddUser(lCount,(Send_User*)pS); delete pS; } } void CFFaxJS::On_User_ZF() { long lItem = GetCurrentSelected(); if ( lItem <0 ) return ; ReadSms(lItem); //状态变为已读 SMS_See sms = GetSms(lItem); if ( m_pMainFrame->m_pFuncView->On_User_List_Add() ) //新建列表 { //添加内容 m_pMainFrame->m_pFuncView->m_DLGSend.List_SetMsg( sms.szMsg ); //内容为空 } } void CFFaxJS::On_User_Del() { long lCount = m_wndList.GetSelectedCount(); long *lDel = new long[lCount+2]; POSITION pos = m_wndList.GetFirstSelectedItemPosition(); long i = 0; while(pos) { lDel[i]= m_wndList.GetNextSelectedItem(pos); i ++; } long lRecvID = 0; TCHAR szSelect[128]; //倒转删除 m_wndList.ShowWindow( SW_HIDE ); //加快显示的速度 for ( i = lCount ; i>0 ; i-- ) { lRecvID = m_wndList.GetItemData( lDel[i-1] ); _stprintf( szSelect , _T("delete from smsrecv where RecvID=%d ") , lRecvID ); BOOL b = m_AdoRS.Open( szSelect ); if ( b && m_AdoRS.GetRecordCount() ) { m_wndList.DeleteItem(lDel[i-1]); //从列表中删除 } } m_wndList.ShowWindow( SW_SHOW ); //加快显示的速度 delete lDel; } void CFFaxJS::On_User_Export() { /* DLG_FAXJS_Export dlg(this); dlg.SetParam(&m_AdoRS2,&m_wndList); dlg.DoModal(); */ } void CFFaxJS::On_User_Refresh() { RefreshInfo(); } void CFFaxJS::On_User_Find() { CString strTemp; DLG_Find_RecvSms dlg(this); dlg.SetParam(!m_bShowToday); if ( dlg.DoModal() == IDOK ) { m_strFindAdd = _T(""); if ( !m_bShowToday ) { strTemp.Format( _T(" AND RecvTime>=#%04d-%02d-%02d# AND RecvTime<=#%04d-%02d-%02d 23:59:59#"),dlg.m_TBegin.GetYear(),dlg.m_TBegin.GetMonth(),dlg.m_TBegin.GetDay(),dlg.m_TEnd.GetYear(),dlg.m_TEnd.GetMonth(),dlg.m_TEnd.GetDay()); m_strFindAdd = strTemp; } if ( dlg.m_strSendNum.GetLength()>0 ) { strTemp.Format( _T(" AND SendNum like '%%%s%%'"),dlg.m_strSendNum ); m_strFindAdd += strTemp; } if ( dlg.m_strRecvNum.GetLength()>0 ) { strTemp.Format( _T(" AND RecvNum like '%%%s%%'"),dlg.m_strRecvNum ); m_strFindAdd += strTemp; } if ( dlg.m_strMsg.GetLength()>0 ) { strTemp.Format( _T(" AND Msg like '%%%s%%'"),dlg.m_strMsg ); m_strFindAdd += strTemp; } On_User_Refresh(); m_strFindAdd = _T(""); //刷新后,查询结束 } } void CFFaxJS::On_User_TypeSetup() { DLG_TypeSetup dlg(this); dlg.SetParam( &m_AdoRS2 ); dlg.DoModal(); } void CFFaxJS::OnRclickSmsjsList(NMHDR* pNMHDR, LRESULT* pResult) { *pResult = 0; ShowRMenu(); } void CFFaxJS::OnDblclkSmsjsList(NMHDR* pNMHDR, LRESULT* pResult) { *pResult = 0; On_User_See(); } void CFFaxJS::ShowRMenu() { CMenu menu; menu.CreatePopupMenu(); BOOL bLock = false; long lItem = this->GetCurrentSelected(); #ifdef YQ_VER CMenu MenuType; MenuType.CreatePopupMenu(); if ( lItem >= 0 ) { //生成存贮空间 long lCount=0; if ( m_AdoRS2.Open( _T("RecvType") , adCmdTable ) ) { lCount = m_AdoRS2.GetRecordCount(); m_AdoRS2.Close(); } if ( m_pMenuType ) delete m_pMenuType; m_pMenuType = new Menu_Type[lCount]; memset(m_pMenuType , 0 , sizeof(Menu_Type)*lCount ); m_lMenuTypeCount = 0; CMenu * pMenu = NULL; //生成Menu个数 if ( m_AdoRS2.Open( _T("select * from RecvType where Type=1") ) && m_AdoRS2.GetRecordCount()>0 ) { long lMenuCount=m_AdoRS2.GetRecordCount(); pMenu = new CMenu[lMenuCount]; lMenuCount=0; m_AdoRS2.MoveFirst(); while( !m_AdoRS2.IsEOF() ) { long lID; CString strName; m_AdoRS2.GetCollect( _T("ID") , lID ); m_AdoRS2.GetCollect( _T("Name") , strName ); //先检查有没有子类 CString str; str.Format( _T("select * from RecvType Where Type=2 and ID2=%d") , lID ); if ( m_AdoRS.Open(str) && m_AdoRS.GetRecordCount()>0 ) { pMenu[lMenuCount].CreatePopupMenu(); MenuType.AppendMenu( MF_STRING|MF_POPUP,(UINT)pMenu[lMenuCount].GetSafeHmenu(), strName ); m_AdoRS.MoveFirst(); while(!m_AdoRS.IsEOF() ) { CString strName2; m_AdoRS.GetCollect( _T("Name") , strName2 ); pMenu[lMenuCount].AppendMenu( MF_STRING , MENU_FAXJS_TYPESETUP+m_lMenuTypeCount+1 , strName2 ); _tcscpy( m_pMenuType[m_lMenuTypeCount].szType1 , strName ); _tcscpy( m_pMenuType[m_lMenuTypeCount].szType2 , strName2 ); m_lMenuTypeCount ++; m_AdoRS.MoveNext(); } m_AdoRS.Close(); lMenuCount ++; } else { MenuType.AppendMenu( MF_STRING,MENU_FAXJS_TYPESETUP+m_lMenuTypeCount+1, strName ); _tcscpy( m_pMenuType[m_lMenuTypeCount].szType1 , strName ); m_lMenuTypeCount ++; } m_AdoRS2.MoveNext(); } m_AdoRS2.Close(); } MenuType.AppendMenu(MF_SEPARATOR ); } MenuType.AppendMenu(MF_STRING , MENU_FAXJS_TYPESETUP , _T(" 类别设置 ") ); #endif if ( lItem >= 0 ) { menu.AppendMenu(MF_STRING , MENU_FAXJS_SEE , _T(" 查 看 ") ); menu.AppendMenu(MF_STRING , MENU_FAXJS_SEND , _T(" 回 复 ") ); menu.AppendMenu(MF_STRING , MENU_FAXJS_ZF , _T(" 转 发 ") ); menu.AppendMenu(MF_STRING , MENU_FAXJS_DEL , _T(" 删 除 ") ); } else { menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_FAXJS_SEE , _T(" 查 看 ") ); menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_FAXJS_SEND, _T(" 回 复 ") ); menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_FAXJS_ZF, _T(" 转 发 ") ); menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_FAXJS_DEL , _T(" 删 除 ") ); } #ifdef YQ_VER menu.AppendMenu(MF_SEPARATOR ); menu.AppendMenu(MF_STRING|MF_POPUP,(UINT)MenuType.GetSafeHmenu(), _T(" 分 类 ") ); #endif menu.AppendMenu(MF_SEPARATOR ); //刷新 menu.AppendMenu(MF_STRING , MENU_FAXJS_EXPORT, _T(" 导出... ") ); //刷新 menu.AppendMenu(MF_STRING , MENU_FAXJS_FIND , _T(" 查找... ") ); menu.AppendMenu(MF_SEPARATOR ); //刷新 menu.AppendMenu(MF_STRING , MENU_FAXJS_REFRESH, _T(" 刷 新 ") ); //显示菜单 POINT pt ; ::GetCursorPos( &pt ); //this->ClientToScreen( &pt); menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL); menu.DestroyMenu(); } SMS_See CFFaxJS::GetSms(long lItem,BOOL bID) { SMS_See sms={0}; long lRecvID = 0; if ( bID ) lRecvID = lItem; else lRecvID = m_wndList.GetItemData(lItem); CString strSelect; COleDateTime t; strSelect.Format( _T("select * from smsrecv where RecvID=%d") , lRecvID ); if ( m_AdoRS.Open( strSelect ) && m_AdoRS.GetRecordCount() ) { m_AdoRS.MoveFirst(); m_AdoRS.GetCollect( _T("Sender") , sms.szSender2 ); m_AdoRS.GetCollect( _T("SendNum") , sms.szSender ); m_AdoRS.GetCollect( _T("RecvNum") , sms.szRecver ); m_AdoRS.GetCollect( _T("Msg") , sms.szMsg ); m_AdoRS.GetCollect( _T("RecvTime"), t );t.GetAsSystemTime(sms.tRecv); sms.tSend = sms.tRecv; _tcscpy( sms.szStatus , _T("接 收") ); } return sms; } void CFFaxJS::ReadSms(long lItem) { long lRecvID = m_wndList.GetItemData(lItem); if ( lRecvID > 0 ) { CString strSelect; strSelect.Format( _T("update smsrecv set Reader=1 where RecvID=%d") , lRecvID ); if ( m_AdoRS.Open( strSelect ) && m_AdoRS.GetRecordCount() ) { m_wndList.SetIconIndex( lItem , 1 ); //显示已读图标 } } } void CFFaxJS::OnTimer(UINT_PTR nIDEvent) { CDialog::OnTimer(nIDEvent); #ifdef SUPPERGSM if ( nIDEvent == 1 ) { KillTimer(1); if ( m_pSendThread ) { m_pSendThread->Com_Exit(); SMS_Init * pSms = new SMS_Init; if (m_Setup.lPort == 0) pSms->lConnectType = CONNECT_IRDA; else pSms->lConnectType = CONNECT_CABLE; pSms->lIndex = 0; pSms->lMobType = m_Setup.lMobileType; pSms->lPort = m_Setup.lPort; pSms->lBuadrate = m_Setup.lBaudrate; pSms->lTimeOut = COM_TIMOUT; pSms->pWnd = (CWnd *)this; m_pSendThread->PostThreadMessage( TH_INIT , (WPARAM)pSms , 0 ); m_pMainFrame->SetStatMsg( _T("正在检测手机...") ); } return ; } #endif if ( nIDEvent == 3 ) { KillTimer(nIDEvent); //将图标加入到任务栏 CString strName=m_pMainFrame->GetSoftSName(); NOTIFYICONDATA niData; if ( m_lIconCount <= 0 ) { niData.hIcon = AfxGetApp()->LoadIcon( IDR_MAINFRAME ); _stprintf( niData.szTip,strName ); } else { m_lIconCount ++; if ( m_lIconCount>888888 ) m_lIconCount = 1; if ( m_lIconCount%2 == 0 ) niData.hIcon = AfxGetApp()->LoadIcon( IDR_MAINFRAME ); else niData.hIcon = AfxGetApp()->LoadIcon( IDI_NULL ); strName += _T("-收到新消息"); _stprintf( niData.szTip,strName ); } niData.cbSize = sizeof( NOTIFYICONDATA ); niData.hWnd = this->m_pMainFrame->m_hWnd; niData.uID = 125; niData.uFlags = NIF_ICON|NIF_TIP; niData.uCallbackMessage = SHELL_ICON_MESS; Shell_NotifyIcon( NIM_MODIFY,&niData ); if ( m_lIconCount>0 ) SetTimer(3 , 500 , NULL ); return ; } } #ifdef SUPPERGSM long CFFaxJS::On_TW_Init(WPARAM wParam , LPARAM lParam ) { long lIndex = (long) wParam; long lCode = (long) lParam; if ( lIndex !=0 ) //消息的可能是错误的 return false; char Buf[64]; switch( lCode ) //连接情况 { case -1: _tcscpy(Buf , "连接串口失败" ); break; case -2: _tcscpy(Buf , "初始化红外连接失败" ); break; case -3: _tcscpy(Buf , "检测不到手机" ); break; case 0: _stprintf(Buf , "连接成功:手机型号为:%s" , m_pSendThread->m_szMobileName ); break; default: _tcscpy(Buf , "未知错误,连接失败" ); break; } m_pMainFrame->SetStatMsg(Buf); if ( lCode != 0 ) //没有成功的,准备重新连接 { Sleep(500); m_pSendThread->Com_Exit(); SetTimer( 1 , 2000 , NULL ); //重新连接手机 } else { if (this->m_Setup.bAutoRead) //如果选择了自动取SIM卡短信 { //直接取SIM卡中的短消息 m_bOneGetSim = false; m_pMainFrame->SetStatMsg("正在查询SIM卡上短消息..."); m_pSendThread->PostThreadMessage( TH_GETSIM , 0 , 0 ); } // else // if (m_pMainFrame->m_pFuncView->isAutoClear()) //如果选择了自动删除 // { // //清空SIM卡中的短消息 // m_bOneGetSim = false; // SendState_SetMsg( lIndex , "正在清空SIM卡上短消息..." ); // m_pMCom[lIndex].m_lTime = GetTickCount(); // m_pMCom[lIndex].pSendThread->PostThreadMessage( TH_CLEAR , 0 , 0 ); // } // else //没有自动取与清空短信,则直接发送短信 // { // SendNextSms(lIndex); //从发送队列里取出数据开始发送。 // } } return 1; } long CFFaxJS::On_TW_Send(WPARAM wParam , LPARAM lParam ) { return 1; } long CFFaxJS::On_TW_Recv(WPARAM wParam , LPARAM lParam ) { long lIndex = (long)wParam; SMS_Recv * pSms = (SMS_Recv *)lParam; m_pMainFrame->SetStatMsg("接收到新的信息!" ); if ( pSms->lMsgType == MSGTYPE_REPORT ) //此短消息是状态报告 { return 1; //忽略状态报告 } m_lMobileRecvCount ++; //接收到的短信+1; if ( pSms->lMsgType == MSGTYPE_SMS ) { ANS_RecvData2 sms={0}; _tcscpy( sms.szSendNum , pSms->szSender ); _tcscpy( sms.szRecvNum , "mobile" ); _tcscpy( sms.szMsg , pSms->szMsg ); ::GetLocalTime(&sms.tRecv); ExMobileGZM(sms.szSendNum); RecvNewSms(sms,true); //收到新的信息; } //如果所接收到的不是SIM卡短信,并设置于自动删除,则直接删除第一条短信 if ( !pSms->bSim && m_Setup.bAutoDelete ) { long lDel = pSms->lIndex > 0 ? pSms->lIndex : 1; char Buf[64]={0}; _stprintf( Buf , "正在删除第%d条短消息..." , lDel ); m_pMainFrame->SetStatMsg(Buf ); m_pSendThread->PostThreadMessage( TH_DELETE , lDel , 0 ); } return 1; } long CFFaxJS::On_TW_GetSim(WPARAM wParam , LPARAM lParam ) { long lIndex = (long)wParam; long lCode = (long)lParam; char Buf[32]={0}; switch( lCode ) //连接情况 { case -4: _tcscpy(Buf , "接口还未初始化" ); break; case -2: _tcscpy(Buf , "查询SIM卡短信超时" ); break; default: _stprintf(Buf , "查询SIM卡短信成功,找到%d条短信" , lCode); break; } m_pMainFrame->SetStatMsg( Buf ); if ( lCode == -2 ) //超时 { Sleep(500); m_pSendThread->Com_Exit(); SMS_Init * pSms = new SMS_Init; if (m_Setup.lPort == 0) pSms->lConnectType = CONNECT_IRDA; else pSms->lConnectType = CONNECT_CABLE; pSms->lIndex = 0; pSms->lMobType = m_Setup.lMobileType; pSms->lPort = m_Setup.lPort; pSms->lBuadrate = m_Setup.lBaudrate; pSms->lTimeOut = COM_TIMOUT; pSms->pWnd = (CWnd *)this; m_pSendThread->PostThreadMessage( TH_INIT , (WPARAM)pSms , 0 ); m_pMainFrame->SetStatMsg( "正在检测手机..." ); } else { Sleep(500); m_pMainFrame->SetStatMsg( "正在清空SIM卡..." ); m_pSendThread->PostThreadMessage( TH_CLEAR , 0 , 0 ); } // else // { // if (m_pMainFrame->m_pFuncView->isAutoClear() && !m_bOneGetSim) //如果选择了自动删除 // { // //清空SIM卡中的短消息 // m_bOneGetSim = false; // SendState_SetMsg( lIndex , "正在清空SIM卡上短消息..." ); // m_pMCom[lIndex].m_lTime = GetTickCount(); // m_pMCom[lIndex].pSendThread->PostThreadMessage( TH_CLEAR , 0 , 0 ); // } // else // { // m_pMCom[lIndex].m_lTime = GetTickCount() + 3600*8*1000; //有连接只为了接收,所以在8小时内不会超时重连 // SendNextSms(lIndex); //从发送队列里取出数据开始发送。 // } // } return 1; } long CFFaxJS::On_TW_Clear(WPARAM wParam , LPARAM lParam ) { long lIndex = (long)wParam; long lCode = (long)lParam; if ( lCode == -2 ) //超时 { m_pMainFrame->SetStatMsg( "清空短信失败!" ); Sleep(500); m_pSendThread->Com_Exit(); SMS_Init * pSms = new SMS_Init; if (m_Setup.lPort == 0) pSms->lConnectType = CONNECT_IRDA; else pSms->lConnectType = CONNECT_CABLE; pSms->lIndex = 0; pSms->lMobType = m_Setup.lMobileType; pSms->lPort = m_Setup.lPort; pSms->lBuadrate = m_Setup.lBaudrate; pSms->lTimeOut = COM_TIMOUT; pSms->pWnd = (CWnd *)this; m_pSendThread->PostThreadMessage( TH_INIT , (WPARAM)pSms , 0 ); m_pMainFrame->SetStatMsg( "正在检测手机..." ); } else { m_pMainFrame->SetStatMsg( "清空短信成功!" ); SetTimer( 1 , 60000*30 , NULL ); //每30分重新连接与取短信,清空短信 } return 1; } long CFFaxJS::On_TW_Delete(WPARAM wParam , LPARAM lParam ) { long lIndex = (long)wParam; long lCode = (long)lParam; if ( lCode == -2 ) //超时 { m_pMainFrame->SetStatMsg( "删除短信失败!" ); Sleep(500); m_pSendThread->Com_Exit(); SMS_Init * pSms = new SMS_Init; if (m_Setup.lPort == 0) pSms->lConnectType = CONNECT_IRDA; else pSms->lConnectType = CONNECT_CABLE; pSms->lIndex = 0; pSms->lMobType = m_Setup.lMobileType; pSms->lPort = m_Setup.lPort; pSms->lBuadrate = m_Setup.lBaudrate; pSms->lTimeOut = COM_TIMOUT; pSms->pWnd = (CWnd *)this; m_pSendThread->PostThreadMessage( TH_INIT , (WPARAM)pSms , 0 ); m_pMainFrame->SetStatMsg( "正在检测手机..." ); } else { m_pMainFrame->SetStatMsg( "删除短信成功!" ); Sleep(500); if ( m_Setup.lAutoClearCount>0 && m_lMobileRecvCount > 0 && m_lMobileRecvCount%m_Setup.lAutoClearCount==0 ) //每接收到10条短信,自动清空SIM卡 { m_pMainFrame->SetStatMsg( "正在清空SIM卡..." ); m_pSendThread->PostThreadMessage( TH_CLEAR , 0 , 0 ); } } return 1; } #endif void CFFaxJS::OnDestroy() { #ifdef SUPPERGSM if ( m_pSendThread ) { m_pSendThread->Com_Exit(); m_pSendThread->PostThreadMessage( WM_QUIT , 0 , 0 ); m_pSendThread = NULL; } #endif if ( m_pMenuType ) delete m_pMenuType; CDialog::OnDestroy(); } void CFFaxJS::RecvNewSms(ANS_RecvData2 sms,BOOL bShowTip) { } void CFFaxJS::ConnectMobile() { #ifdef SUPPERGSM //连接手机特殊设置 m_Setup = m_pMainFrame->m_Setup; m_pSendThread = new CSendThread; m_pSendThread->CreateThread(); SMS_Init * pSms = new SMS_Init; if (m_Setup.lPort == 0) pSms->lConnectType = CONNECT_IRDA; else pSms->lConnectType = CONNECT_CABLE; pSms->lIndex = 0; pSms->lMobType = m_Setup.lMobileType; pSms->lPort = m_Setup.lPort; pSms->lBuadrate = m_Setup.lBaudrate; pSms->lTimeOut = COM_TIMOUT; pSms->pWnd = (CWnd *)this; m_pSendThread->PostThreadMessage( TH_INIT , (WPARAM)pSms , 0 ); m_pMainFrame->SetStatMsg( _T("正在检测手机...") ); #endif } void CFFaxJS::OnOK() { //CDialog::OnOK(); } void CFFaxJS::OnCancel() { //CDialog::OnCancel(); } void CFFaxJS::On_User_Type(long lIndex) { #ifndef YQ_VER return ; #endif long lItem = this->GetCurrentSelected(); if ( lItem <0 ) return ; long lID = m_wndList.GetItemData(lItem); CString strSelect; strSelect.Format( _T("select * from smsrecv where RecvID=%d") , lID ); if ( m_AdoRS.Open( strSelect ) && m_AdoRS.GetRecordCount() ) { m_AdoRS.MoveFirst(); m_AdoRS.PutCollect( _T("Type1") , m_pMenuType[lIndex].szType1 ); m_AdoRS.PutCollect( _T("Type2") , m_pMenuType[lIndex].szType2 ); m_AdoRS.Update(); m_AdoRS.Close(); CString str = m_pMenuType[lIndex].szType1; if ( _tcslen(m_pMenuType[lIndex].szType2) >0 ) { str += _T("-"); str += m_pMenuType[lIndex].szType2; } m_wndList.SetItemText( lItem , 6 , str ); } } BOOL CFFaxJS::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) { if ( nID>= (UINT)(MENU_FAXJS_TYPESETUP+1) && nID<=(UINT)(MENU_FAXJS_TYPESETUP+1+m_lMenuTypeCount) ) { long lCount = (long)(nID - (MENU_FAXJS_TYPESETUP+1)); On_User_Type(lCount); } return CDialog::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo); } void CFFaxJS::SetToday(BOOL bToday) { if ( m_bShowToday != bToday ) { m_bShowToday = bToday; m_bRefresh = false; } } void CFFaxJS::ReadSetup() { //连接手机特殊设置 m_Setup = m_pMainFrame->m_Setup; } BOOL CFFaxJS::FlashIcon(BOOL bCheck, BOOL bFlash) { if ( bCheck ) { CString str; str=_T("select count(*) as abc from smsRecv where Reader=0 "); //查询未读的短信 if ( m_AdoRS.Open(str) && m_AdoRS.GetRecordCount()>0 ) { long lCount; m_AdoRS.MoveFirst(); m_AdoRS.GetCollect( _T("abc") , lCount ); if ( lCount >0 ) bFlash = true; else bFlash = false; } else { bFlash = false; } m_AdoRS.Close(); } if ( bFlash ) { m_lIconCount = 1; SetTimer(3 , 500 , NULL); } else { m_lIconCount = -1; } return bFlash; } BOOL CFFaxJS::ShowNoReaderMsg() { CString str; SMS_See sms={0}; long lRecvID = 0; COleDateTime t; str="select top 1 * from smsRecv where Reader=0 order by RecvTime"; //查询未读的短信 if ( m_AdoRS.Open(str) && m_AdoRS.GetRecordCount()>0 ) { m_AdoRS.MoveFirst(); TCHAR szSender[32]={0}; TCHAR szSendNum[32]={0}; m_AdoRS.GetCollect( _T("RecvID") , lRecvID); m_AdoRS.GetCollect( _T("SendNum") , szSendNum ); m_AdoRS.GetCollect( _T("Sender") , szSender ); m_AdoRS.GetCollect( _T("RecvNum") , sms.szRecver ); m_AdoRS.GetCollect( _T("Msg") , sms.szMsg ); m_AdoRS.GetCollect( _T("RecvTime"), t );t.GetAsSystemTime(sms.tRecv); m_AdoRS.Close(); sms.tSend = sms.tRecv; _tcscpy( sms.szStatus , _T("接 收") ); if ( _tcslen(szSender)>0 ) _stprintf(sms.szSender , _T("%s-%s") , szSendNum,szSender ); else _tcscpy(sms.szSender , szSendNum ); //状态变为已读 str.Format( _T("update smsrecv set Reader=1 where RecvID=%d") , lRecvID ); if ( m_AdoRS.Open( str ) && m_AdoRS.GetRecordCount() ) { //查找,改变图标 long lCount = m_wndList.GetItemCount(); long lRecvID2 = 0; for ( int i=0 ; im_pFuncView->On_User_List_Add() ) //新建列表 { //添加号码 //分配数据 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 , szSender ); _tcscpy(pUser->szMobile , szSendNum ); m_pMainFrame->m_pFuncView->On_User_List_AddUser(lCount,(Send_User*)pS); delete pS; } } //闪动图标 FlashIcon(true,false); return true; } FlashIcon(false,false); //不闪动图标了。 return false; }