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

📄 msglistsendwnd.cpp

📁 symbian手机短信报警
💻 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;i<nCount;i++)
		this->m_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;i<this->nMaxNum;i++)
		{
			if(this->m_Info[i].bAutoSend)
			{
				for(int j=0;j<m_Info[i].nHour;j++)
				{
					if(Tm.GetHour()==m_Info[i].nHourBuff[j])
					{
						strVal.Format("%.2f",GetRealVal(m_Info[i].szId));
						//发送消息
						if(bConnected)
						{
							CString strNum,strContent;
							if(m_Info[i].bSend)
							{
								strNum.Format("%d",m_Info[i].nNum);
								strContent=m_Info[i].szContent;
								strContent+=strVal;
								m_hSms.SendMsg(strNum,strContent,0);
							}
						}
					}
				}
			}
		}
	}
}

double CMsgListSendWnd::GetRealVal(CString strVal)//获得定时发送数据实时内容
{
	double dValue = 0.00f;
	CString strId,szVal;
	
	//read data from database and save to ini file
	_RecordsetPtr m_pRecordset;
	_variant_t RecordsAffected;
	m_pRecordset.CreateInstance(__uuidof(Recordset));
	m_pConnection->put_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;
}

⌨️ 快捷键说明

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