www.pudn.com > symbian_sms_alarm.rar > MsgListSendWnd.cpp


// MsgListSendWnd.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "msgdemo.h" 
#include "MsgListSendWnd.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CMsgListSendWnd 
BEGIN_EVENTSINK_MAP(CMsgListSendWnd, CWnd) 
    //{{AFX_EVENTSINK_MAP(CTestactivexDlg) 
	ON_EVENT(CMsgListSendWnd, IDC_SMSX, 4 /* OnConnectResult */, OnConnectResultSmsx, VTS_I4) 
	ON_EVENT(CMsgListSendWnd, IDC_SMSX, 6 /* OnSendMsg */, OnSendMsgSmsx, VTS_I2 VTS_I4) 
//	ON_EVENT(CMsgDemoView, IDC_SMSX1, 5 /* OnRecvMsg */, OnOnRecvMsgSmsx1, VTS_I2) 
	//}}AFX_EVENTSINK_MAP 
END_EVENTSINK_MAP() 
 
CMsgListSendWnd::CMsgListSendWnd() 
{ 
	nMaxNum = 0; 
	bConnected = FALSE; 
} 
 
CMsgListSendWnd::~CMsgListSendWnd() 
{ 
} 
//IMPLEMENT_DYNCREATE(CMsgListSendWnd, CWnd) 
 
BEGIN_MESSAGE_MAP(CMsgListSendWnd, CWnd) 
	//{{AFX_MSG_MAP(CMsgListSendWnd)  
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
 
///////////////////////////////////////////////////////////////////////////// 
// CMsgListSendWnd message handlers 
 
CString  szPortName="COM1"; 
CString  szAccessCode="170223117220192";  
 
void CMsgListSendWnd::InitDevice()//初始化设备 
{	 
	//创建通讯空间 
	m_hSms.Create("",WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),AfxGetApp()->GetMainWnd(),IDC_SMSX); 
	m_hSms.Init(); 
	m_hSms.ConnectModem(szPortName,57600,szAccessCode); 
	m_hSms.ShowWindow(SW_HIDE); 
  
	//传见结构体初始化对象 
	m_Info = new MsgInfo[500]; 
	for(int i=0;i<500;i++) 
	{ 
		m_Info[i].bAutoSend=FALSE; 
		m_Info[i].bSend=TRUE; 
		m_Info[i].nHour=0; 
		m_Info[i].nNum=0; 
		m_Info[i].szContent.Empty(); 
		m_Info[i].szDes.Empty(); 
		m_Info[i].szId.Empty(); 
	} 
 
	//读取INI文件配置内容 
	ReadIniFileVal(); 
	 
	//打开数据源 
	HRESULT hr; 
	try 
	{ 
		hr = m_pConnection.CreateInstance("ADODB.Connection");//创建Connection对象 
		if(SUCCEEDED(hr)) 
		{ 
			hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=JHWY.mdb","","",adModeUnknown);///连接数据库 
			///上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,需要改为:Provider=Microsoft.Jet.OLEDB.3.51; } 
		}  
	} 
	catch(_com_error e)///捕捉异常 
	{ 
		CString errormessage; 
		errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage()); 
		AfxMessageBox(errormessage);///显示错误信息 
		exit(0); 
	}  	 
} 
 
BOOL CMsgListSendWnd::ReadIniFileVal() 
{ 
	//读取固定报警信息内容 
	CIniFile IniFile; 
	CString str,path; 
	path=AfxGetApp()->m_pszHelpFilePath; 
	str=AfxGetApp()->m_pszExeName;  
	path=path.Left(path.GetLength()-str.GetLength()-4);  
	IniFile.SetName("MsgList"); 
	IniFile.SetPath(path); 
	BOOL bExist=IniFile.OpenIniFileForRead(); 
	if(bExist) 
	{ 
		CString strId,strTolVal; 
		for(int i=0;i<500;i++) 
		{ 
			strId.Format("%.4d",i+1); 
			strTolVal.Empty(); 
			IniFile.GetItemString("Data",strId,strTolVal); 
			if(!strTolVal.IsEmpty()) 
				DataProcessIniVal(strTolVal,FALSE); 
		}  
	} 
 
	//读取固定发送信息 
	IniFile.SetName("SetTimerList"); 
	IniFile.SetPath(path); 
	bExist=IniFile.OpenIniFileForRead(); 
	if(bExist) 
	{ 
		CString strId,strTolVal; 
		for(int i=0;i<50;i++) 
		{ 
			strId.Format("%.4d",i+1); 
			strTolVal.Empty(); 
			IniFile.GetItemString("Data",strId,strTolVal); 
			if(!strTolVal.IsEmpty()) 
				DataProcessIniVal(strTolVal,TRUE); 
		} 
		return TRUE; 
	} 
	return FALSE; 
} 
 
void CMsgListSendWnd::DataProcessIniVal(CString strVal,BOOL bAutoSend) 
{ 
	CString szTemp;	 
	szTemp=strVal; 
	CString str[10];  
	int nSize=1; 
	while(1) 
	{  
		int nCount=szTemp.Find(';'); 
		if(nCount==-1) 
			break; 
		str[nSize]=szTemp.Left(nCount); 
		szTemp=szTemp.Right(szTemp.GetLength()-nCount-1);			 
		nSize++; 
	}  
	str[nSize]=szTemp;  
	//Reset the temp value  
	if(!str[1].IsEmpty()) 
	{ 
		m_Info[nMaxNum].szId=str[1]; 
		m_Info[nMaxNum].szContent=str[2]; 
		m_Info[nMaxNum].nNum=atoi(str[3]); 
		if(str[4]=="发送") 
			m_Info[nMaxNum].bSend=TRUE; 
		else 
			m_Info[nMaxNum].bSend=FALSE; 
		m_Info[nMaxNum].szDes=str[5];  
		if(bAutoSend)//固定信息发送  
		{ 
			DataCString(str[5]); 
			m_Info[nMaxNum].bAutoSend=TRUE; 
		}		 
		nMaxNum++; 
	} 
} 
 
int CMsgListSendWnd::GetMaxBuffNum() 
{ 
	return nMaxNum; 
} 
 
void CMsgListSendWnd::DataCString(CString strVal) 
{ 
	CString szTemp;	 
	szTemp=strVal; 
	CString str[30];  
	int nSize=1; 
	while(1) 
	{  
		int nCount=szTemp.Find(','); 
		if(nCount==-1) 
			break; 
		str[nSize]=szTemp.Left(nCount); 
		szTemp=szTemp.Right(szTemp.GetLength()-nCount-1);			 
		nSize++; 
	}  
	str[nSize]=szTemp; 
	//Insert ListCtrl Content  
	int nCount=0; 
	for(int i=0;i<30;i++) 
	{ 
		if(!str[i+1].IsEmpty()) 
			nCount++; 
		else 
			break; 
	}  
	// 
	this->m_Info[nMaxNum].nHour=nCount; 
	for(i=0;im_Info[nMaxNum].nHourBuff[i]=atoi(str[i+1]); 
} 
 
 
 
BOOL CMsgListSendWnd::SetMsgListContent(CString strId) 
{   
	BOOL bExist; 
	int nPos=0; 
	for(int i=0;i<500;i++) 
	{ 
		if(strcmp(this->m_Info[i].szId,strId)==0) 
		{ 
			bExist=TRUE; 
			nPos=i; 
			break; 
		} 
	} 
	//发送消息 
	if(bConnected) 
	{ 
		CString strNum,strContent; 
		if(m_Info[nPos].bSend) 
		{ 
			strNum.Format("%d",m_Info[nPos].nNum); 
			strContent=m_Info[nPos].szContent; 
			m_hSms.SendMsg(strNum,strContent,0); 
		} 
	} 
	return bExist; 
} 
 
void CMsgListSendWnd::OnConnectResultSmsx(long Status) 
{ 
	if (Status==0)  
		bConnected=TRUE; 
	else  
		bConnected=FALSE; 
} 
 
 
void CMsgListSendWnd::OnSendMsgSmsx(short Result,long MsgIndex) 
{ 
	// TODO: Add your control notification handler code here 
	if (Result==0) 
		::AfxMessageBox("短信发送成功!       ");	 
	else 
		::AfxMessageBox("短信发送失败!       ");	 
} 
 
void CMsgListSendWnd::JudgeTimeToSendMsg()//判断时间然后发送消息 
{ 
	CTime Tm=CTime::GetCurrentTime(); 
	CString strVal; 
	if(Tm.GetMinute()==0 && Tm.GetSecond()==0) 
	{ 
		for(int i=0;inMaxNum;i++) 
		{ 
			if(this->m_Info[i].bAutoSend) 
			{ 
				for(int j=0;jput_ConnectionTimeout(long(5));  
	//开关量表 
	m_pRecordset->Open("select * from RealElecenergy",// 查询DemoTable表中所有字段 
		m_pConnection.GetInterfacePtr(),  // 获取库接库的IDispatch指针 
		adOpenDynamic, 
		adLockOptimistic, 
		adCmdText);   
	while(!m_pRecordset->adoEOF) 
	{ 
		_variant_t var = m_pRecordset->GetCollect("ID"); 
		if(var.vt != VT_NULL) 
		{ 
			strId = (LPCSTR)_bstr_t(var); 
			if(strcmp(strId,strVal)==0) 
			{ 
				var = m_pRecordset->GetCollect("RealValue"); 
				szVal = (LPCSTR)_bstr_t(var); 
				dValue = (double)atof(szVal); 
			} 
		}  
		m_pRecordset->MoveNext(); 
	} 
	m_pRecordset->Close();  
	return dValue; 
}